Sha256: 5970f65d6053c3b0b5a3ea532864510d65ac243166f87db69e3be2d4ad06618a

Contents?: true

Size: 1.83 KB

Versions: 5

Compression:

Stored size: 1.83 KB

Contents

//
//  refract/Build.h
//  librefract
//
//  Created by Jiri Kratochvil on 03/01/16.
//  Copyright (c) 2016 Apiary Inc. All rights reserved.
//
#ifndef REFRACT_BUILD_H
#define REFRACT_BUILD_H

namespace refract
{
    /**
     * Simple concept based on operator() override. It 
     * allows tricky creating of complex refract structures
     * eg:
     * ```
        return Build(new ObjectElement)
           ("m1", IElement::Create("Value"))
           ("m2", Build(new ArrayElement)
                     (IElement::Create("m2[0]"))
           )
           ("m3", Build(new ObjectElement)
                     ("m3.1", IElement::Create("Str3.1"))
                     ("m3.2", IElement::Create(3.2))
                     ("m3.3", Build(new ObjectElement)
                                 ("m3.3.1", IElement::Create("Str3/4/1"))
                                 ("m3.3.2", IElement::Create(3.42))
                                 ("m3.3.2", new NullElement)
                     )
           );
     * ```
     */
    template <typename T>
    struct ElementBuilder {
        T* element;

        ElementBuilder(T* element) : element(element) {}

        operator T*() {
            return element;
        }

        ElementBuilder<T>& operator()(IElement* member) {
            element->push_back(member);
            return *this;
        }

        ElementBuilder<T>& operator()(IElement* key, IElement* value) {
            element->push_back(new MemberElement(key, value));
            return *this;
        }

        ElementBuilder<T>& operator()(const std::string& key, IElement* value) {
            element->push_back(new MemberElement(key, value));
            return *this;
        }
    };

    template <typename E>
    ElementBuilder<E> Build(E* e) {
        return ElementBuilder<E>(e);
    }
}; // namespace refract

#endif // #ifndef REFRACT_BUILD_H

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lounge_lizard-0.1.4 ext/drafter/src/refract/Build.h
lounge_lizard-0.1.3 ext/drafter/src/refract/Build.h
lounge_lizard-0.1.2 ext/drafter/src/refract/Build.h
lounge_lizard-0.1.1 ext/drafter/src/refract/Build.h
lounge_lizard-0.1.0 ext/drafter/src/refract/Build.h