{
    mode: "facet",
    output_cpp_dir: "src/expression2",
    output_hpp_dir: "include/xo/expression2",
    output_impl_subdir: "detail",
    includes: [ "\"TypeRef.hpp\"",
                "\"exprtype.hpp\"",
                "<xo/reflect/TypeDescr.hpp>"],
    // extra includes in Expression.hpp, if any
    user_hpp_includes: [],
    namespace1: "xo",
    namespace2: "scm",
    // text after includes, before AExpression
    pretext: [ "// {pretext} here" ],
    facet: "Expression",
    detail_subdir: "detail",
    brief: "a schematika expression",
    using_doxygen: true,
    doc: [
        "Representation for executable Schematika expressions"
    ],
    types: [
        // using TypeDescr = xo::reflect::TypeDescr;
        {
            name: "TypeDescr",
            doc: ["struct describing a type"],
            definition: "xo::reflect::TypeDescr"
        },
    ],
    const_methods: [
        {
            name: "extype",
            doc: ["expression type (constant | apply | ..)"],
            return_type: "exprtype",
            args: [],
            const: true,
            noexcept: true,
            attributes: [],
        },
        {
            name: "typeref",
            doc: ["placeholder for type giving possible values for this expression"],
            return_type: "TypeRef",
            args: [],
            const: true,
            noexcept: true,
            attributes: [],
        },
        {
            name: "valuetype",
            doc: ["type giving possible values for this expression. Maybe null before typecheck"],
            return_type: "TypeDescr",
            args: [],
            const: true,
            noexcept: true,
            attributes: [],
        },
    ],
    nonconst_methods: [
        {
            name: "assign_valuetype",
            doc: ["assing to valuetype member. Useful when scaffolding expressions"],
            return_type: "void",
            args: [
                // void assign_valuetype(TypeDescr td)
                {type: "TypeDescr", name: "td"},
            ],
            const: false,
            noexcept: true,
            attributes: [],
        }
    ],
    router_facet_explicit_content: [ ],
}
