[INFO] cloning repository https://github.com/mjul/rust-metaprogramming-lab [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mjul/rust-metaprogramming-lab" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmjul%2Frust-metaprogramming-lab", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmjul%2Frust-metaprogramming-lab'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] ca78d221b945fbdcf6d9df8568501ac9dfbf53b4 [INFO] checking mjul/rust-metaprogramming-lab against try#4949cf2f817beadb9a248d423b6d55d6d2398ffe for pr-142681 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmjul%2Frust-metaprogramming-lab" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/mjul/rust-metaprogramming-lab [INFO] finished tweaking git repo https://github.com/mjul/rust-metaprogramming-lab [INFO] tweaked toml for git repo https://github.com/mjul/rust-metaprogramming-lab written to /workspace/builds/worker-0-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/mjul/rust-metaprogramming-lab on toolchain 4949cf2f817beadb9a248d423b6d55d6d2398ffe [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+4949cf2f817beadb9a248d423b6d55d6d2398ffe" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/mjul/rust-metaprogramming-lab already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+4949cf2f817beadb9a248d423b6d55d6d2398ffe" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] warning: virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2021 which implies `resolver = "2"` [INFO] [stderr] note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest [INFO] [stderr] note: to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest [INFO] [stderr] note: for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded fltk v1.3.11 [INFO] [stderr] Downloaded fltk-sys v1.3.11 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cf8efcab8866f2cf4285301c7418e2f4f2a9b088c91ba69c40d5b659f81557f7" "/opt/rustwide/cargo-home/bin/cargo" "+4949cf2f817beadb9a248d423b6d55d6d2398ffe" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 45690a21056f0e67074d0a7433dd2998ef9671cc8f890a956ccf8ed5835054ee [INFO] running `Command { std: "docker" "start" "-a" "45690a21056f0e67074d0a7433dd2998ef9671cc8f890a956ccf8ed5835054ee", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "45690a21056f0e67074d0a7433dd2998ef9671cc8f890a956ccf8ed5835054ee", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "45690a21056f0e67074d0a7433dd2998ef9671cc8f890a956ccf8ed5835054ee", kill_on_drop: false }` [INFO] [stdout] 45690a21056f0e67074d0a7433dd2998ef9671cc8f890a956ccf8ed5835054ee [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:cf8efcab8866f2cf4285301c7418e2f4f2a9b088c91ba69c40d5b659f81557f7" "/opt/rustwide/cargo-home/bin/cargo" "+4949cf2f817beadb9a248d423b6d55d6d2398ffe" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 7630dad96165c09fa9e55870c85ea6446355551eee382853043c04406837d6dc [INFO] running `Command { std: "docker" "start" "-a" "7630dad96165c09fa9e55870c85ea6446355551eee382853043c04406837d6dc", kill_on_drop: false }` [INFO] [stderr] warning: virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2021 which implies `resolver = "2"` [INFO] [stderr] note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest [INFO] [stderr] note: to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest [INFO] [stderr] note: for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions [INFO] [stderr] Compiling proc-macro2 v1.0.40 [INFO] [stderr] Compiling quote v1.0.20 [INFO] [stderr] Compiling time-macros v0.2.4 [INFO] [stderr] Compiling syn v1.0.98 [INFO] [stderr] Checking itoa v1.0.2 [INFO] [stderr] Compiling unicode-ident v1.0.1 [INFO] [stderr] Compiling num_threads v0.1.6 [INFO] [stderr] Compiling cc v1.0.73 [INFO] [stderr] Compiling crossbeam-utils v0.8.10 [INFO] [stderr] Checking once_cell v1.13.0 [INFO] [stderr] Compiling libc v0.2.126 [INFO] [stderr] Compiling metaprogramming_lab v0.1.0 (/opt/rustwide/workdir/metaprogramming_lab) [INFO] [stderr] Checking ttf-parser v0.15.2 [INFO] [stderr] Compiling paste v1.0.7 [INFO] [stderr] Compiling cmake v0.1.48 [INFO] [stderr] Checking crossbeam-channel v0.5.5 [INFO] [stderr] Compiling fltk-sys v1.3.11 [INFO] [stderr] Checking time v0.3.11 [INFO] [stderr] Checking metamodel v0.1.0 (/opt/rustwide/workdir/metamodel) [INFO] [stderr] Checking metamodel_macros v0.1.0 (/opt/rustwide/workdir/metamodel_macros) [INFO] [stdout] warning: struct `GenStructsInputEnum` is never constructed [INFO] [stdout] --> metamodel_macros/src/lib.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | struct GenStructsInputEnum {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `GenStructsInput` is never used [INFO] [stdout] --> metamodel_macros/src/lib.rs:21:6 [INFO] [stdout] | [INFO] [stdout] 21 | enum GenStructsInput { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GenStructsInputEnum` is never constructed [INFO] [stdout] --> metamodel_macros/src/lib.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | struct GenStructsInputEnum {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `GenStructsInput` is never used [INFO] [stdout] --> metamodel_macros/src/lib.rs:21:6 [INFO] [stdout] | [INFO] [stdout] 21 | enum GenStructsInput { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `GenStructsInputEnum` is never constructed [INFO] [stdout] --> metamodel_macros/src/lib.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | struct GenStructsInputEnum {} [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `GenStructsInput` is never used [INFO] [stdout] --> metamodel_macros/src/lib.rs:21:6 [INFO] [stdout] | [INFO] [stdout] 21 | enum GenStructsInput { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Checking metamodel_test v0.1.0 (/opt/rustwide/workdir/metamodel_test) [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_data_structures... [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro input parsing completed... [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 name: Ok("Foo") [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"label": "Foo Record", "description": "A Foo is a very important entity with no fields."}) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [] }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [] [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("Foo"), documentation: Documentation { label: "Foo Record", description: "A Foo is a very important entity with no fields." }, fields: [] }) [INFO] [stdout] 🚀🚀🚀 code: struct Foo {} impl Foo { pub fn new() -> Self { Self {} } } impl std :: [INFO] [stdout] convert :: From < Foo > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : Foo) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("Foo Record", [INFO] [stdout] "A Foo is a very important entity with no fields."), values : vec! [INFO] [stdout] [], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 name: Ok("Bar") [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"label": "Bar Record", "description": "A Bar is a very important entity with just and ID."}) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "id" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The unique Bar entity ID." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] })] })] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("id") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "ID", "description": "The unique Bar entity ID."}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("ID") [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [("id", {"label": "ID", "description": "The unique Bar entity ID."}, "ID")])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"label": "ID", "description": "The unique Bar entity ID."}, "ID")] [INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"label": "ID", "description": "The unique Bar entity ID."} "ID" [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("Bar"), documentation: Documentation { label: "Bar Record", description: "A Bar is a very important entity with just and ID." }, fields: [FieldDeclaration { name: Literal("id"), documentation: Documentation { label: "ID", description: "The unique Bar entity ID." }, field_type: Primitive(Id) }] }) [INFO] [stdout] 🚀🚀🚀 code: struct Bar { pub id : u64 } impl Bar [INFO] [stdout] { pub fn new(id : u64) -> Self { Self { id : id } } } impl std :: convert :: [INFO] [stdout] From < Bar > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : Bar) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("Bar Record", [INFO] [stdout] "A Bar is a very important entity with just and ID."), values : [INFO] [stdout] vec! [INFO] [stdout] [(metamodel :: DisplayableValue :: Id(item.id), metamodel :: [INFO] [stdout] Documentation :: new("ID", "The unique Bar entity ID."))], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 name: Ok("Baz") [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"label": "Baz Record", "description": "A Baz is a very important entity with two fields."}) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "id" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The unique Bar entity ID." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The birthday for this Baz." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "LocalDate" }) })] })] })] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("id") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The unique Bar entity ID.", "label": "ID"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("ID") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("birthday") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The birthday for this Baz.", "label": "Birthday"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("LocalDate") [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [("id", {"description": "The unique Bar entity ID.", "label": "ID"}, "ID"), ("birthday", {"description": "The birthday for this Baz.", "label": "Birthday"}, "LocalDate")])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"description": "The unique Bar entity ID.", "label": "ID"}, "ID"), ("birthday", {"description": "The birthday for this Baz.", "label": "Birthday"}, "LocalDate")] [INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"description": "The unique Bar entity ID.", "label": "ID"} "ID" [INFO] [stdout] 🚀🚀🚀 compiling field: "birthday" {"description": "The birthday for this Baz.", "label": "Birthday"} "LocalDate" [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("Baz"), documentation: Documentation { label: "Baz Record", description: "A Baz is a very important entity with two fields." }, fields: [FieldDeclaration { name: Literal("id"), documentation: Documentation { label: "ID", description: "The unique Bar entity ID." }, field_type: Primitive(Id) }, FieldDeclaration { name: Literal("birthday"), documentation: Documentation { label: "Birthday", description: "The birthday for this Baz." }, field_type: Primitive(LocalDate) }] }) [INFO] [stdout] 🚀🚀🚀 code: struct Baz { pub id : u64, pub birthday : time :: Date } impl Baz [INFO] [stdout] { [INFO] [stdout] pub fn new(id : u64, birthday : time :: Date) -> Self [INFO] [stdout] { Self { id : id, birthday : birthday } } [INFO] [stdout] } impl std :: convert :: From < Baz > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : Baz) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("Baz Record", [INFO] [stdout] "A Baz is a very important entity with two fields."), values : [INFO] [stdout] vec! [INFO] [stdout] [(metamodel :: DisplayableValue :: Id(item.id), metamodel :: [INFO] [stdout] Documentation :: new("ID", "The unique Bar entity ID.")), [INFO] [stdout] (metamodel :: DisplayableValue :: LocalDate(item.birthday), [INFO] [stdout] metamodel :: Documentation :: [INFO] [stdout] new("Birthday", "The birthday for this Baz."))], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 name: Ok("AllFieldTypes") [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"description": "This record has fields of all types.", "label": "All Field Types"}) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "id" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The unique Entity ID." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The name of this Entity." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "String" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The birthday for this Entity." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "LocalDate" }) })] })] }), Comma] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("id") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The unique Entity ID.", "label": "ID"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("ID") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("name") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The name of this Entity.", "label": "Name"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("String") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("birthday") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "Birthday", "description": "The birthday for this Entity."}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("LocalDate") [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [("id", {"description": "The unique Entity ID.", "label": "ID"}, "ID"), ("name", {"description": "The name of this Entity.", "label": "Name"}, "String"), ("birthday", {"label": "Birthday", "description": "The birthday for this Entity."}, "LocalDate")])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"description": "The unique Entity ID.", "label": "ID"}, "ID"), ("name", {"description": "The name of this Entity.", "label": "Name"}, "String"), ("birthday", {"label": "Birthday", "description": "The birthday for this Entity."}, "LocalDate")] [INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"description": "The unique Entity ID.", "label": "ID"} "ID" [INFO] [stdout] 🚀🚀🚀 compiling field: "name" {"description": "The name of this Entity.", "label": "Name"} "String" [INFO] [stdout] 🚀🚀🚀 compiling field: "birthday" {"label": "Birthday", "description": "The birthday for this Entity."} "LocalDate" [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("AllFieldTypes"), documentation: Documentation { label: "All Field Types", description: "This record has fields of all types." }, fields: [FieldDeclaration { name: Literal("id"), documentation: Documentation { label: "ID", description: "The unique Entity ID." }, field_type: Primitive(Id) }, FieldDeclaration { name: Literal("name"), documentation: Documentation { label: "Name", description: "The name of this Entity." }, field_type: Primitive(String) }, FieldDeclaration { name: Literal("birthday"), documentation: Documentation { label: "Birthday", description: "The birthday for this Entity." }, field_type: Primitive(LocalDate) }] }) [INFO] [stdout] 🚀🚀🚀 code: struct AllFieldTypes [INFO] [stdout] { pub id : u64, pub name : String, pub birthday : time :: Date } impl [INFO] [stdout] AllFieldTypes [INFO] [stdout] { [INFO] [stdout] pub fn new(id : u64, name : String, birthday : time :: Date) -> Self [INFO] [stdout] { Self { id : id, name : name, birthday : birthday } } [INFO] [stdout] } impl std :: convert :: From < AllFieldTypes > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : AllFieldTypes) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("All Field Types", "This record has fields of all types."), [INFO] [stdout] values : vec! [INFO] [stdout] [(metamodel :: DisplayableValue :: Id(item.id), metamodel :: [INFO] [stdout] Documentation :: new("ID", "The unique Entity ID.")), [INFO] [stdout] (metamodel :: DisplayableValue :: [INFO] [stdout] String(String :: from(item.name)), metamodel :: Documentation :: [INFO] [stdout] new("Name", "The name of this Entity.")), [INFO] [stdout] (metamodel :: DisplayableValue :: LocalDate(item.birthday), [INFO] [stdout] metamodel :: Documentation :: [INFO] [stdout] new("Birthday", "The birthday for this Entity."))], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 name: Ok("Birth") [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"label": "Birth Information", "description": "This holds information about a birth."}) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "id" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The unique entity ID." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "full_name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Full Name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The full name of the person." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "String" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The birthday itself." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "LocalDate" }) })] })] })] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("id") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "ID", "description": "The unique entity ID."}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("ID") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("full_name") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The full name of the person.", "label": "Full Name"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("String") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("birthday") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "Birthday", "description": "The birthday itself."}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("LocalDate") [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [("id", {"label": "ID", "description": "The unique entity ID."}, "ID"), ("full_name", {"description": "The full name of the person.", "label": "Full Name"}, "String"), ("birthday", {"label": "Birthday", "description": "The birthday itself."}, "LocalDate")])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"label": "ID", "description": "The unique entity ID."}, "ID"), ("full_name", {"description": "The full name of the person.", "label": "Full Name"}, "String"), ("birthday", {"label": "Birthday", "description": "The birthday itself."}, "LocalDate")] [INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"label": "ID", "description": "The unique entity ID."} "ID" [INFO] [stdout] 🚀🚀🚀 compiling field: "full_name" {"description": "The full name of the person.", "label": "Full Name"} "String" [INFO] [stdout] 🚀🚀🚀 compiling field: "birthday" {"label": "Birthday", "description": "The birthday itself."} "LocalDate" [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("Birth"), documentation: Documentation { label: "Birth Information", description: "This holds information about a birth." }, fields: [FieldDeclaration { name: Literal("id"), documentation: Documentation { label: "ID", description: "The unique entity ID." }, field_type: Primitive(Id) }, FieldDeclaration { name: Literal("full_name"), documentation: Documentation { label: "Full Name", description: "The full name of the person." }, field_type: Primitive(String) }, FieldDeclaration { name: Literal("birthday"), documentation: Documentation { label: "Birthday", description: "The birthday itself." }, field_type: Primitive(LocalDate) }] }) [INFO] [stdout] 🚀🚀🚀 code: struct Birth [INFO] [stdout] { pub id : u64, pub full_name : String, pub birthday : time :: Date } impl [INFO] [stdout] Birth [INFO] [stdout] { [INFO] [stdout] pub fn new(id : u64, full_name : String, birthday : time :: Date) -> Self [INFO] [stdout] { Self { id : id, full_name : full_name, birthday : birthday } } [INFO] [stdout] } impl std :: convert :: From < Birth > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : Birth) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("Birth Information", "This holds information about a birth."), [INFO] [stdout] values : vec! [INFO] [stdout] [(metamodel :: DisplayableValue :: Id(item.id), metamodel :: [INFO] [stdout] Documentation :: new("ID", "The unique entity ID.")), [INFO] [stdout] (metamodel :: DisplayableValue :: [INFO] [stdout] String(String :: from(item.full_name)), metamodel :: Documentation [INFO] [stdout] :: new("Full Name", "The full name of the person.")), [INFO] [stdout] (metamodel :: DisplayableValue :: LocalDate(item.birthday), [INFO] [stdout] metamodel :: Documentation :: [INFO] [stdout] new("Birthday", "The birthday itself."))], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stderr] Checking fltk v1.3.11 [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 running macro: generate_model_from_tuple... [INFO] [stdout] 🔍 parsing tuple expression... [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "record" }) }) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type! [INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation! [INFO] [stdout] 🚀🚀🚀 name: Ok("Birth") [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"label": "Birth Information", "description": "This holds information about a birth."}) [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 name: Ok("Birth") [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "id" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The unique entity ID." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "full_name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Full Name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The full name of the person" }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "String" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The birthday itself." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "LocalDate" }) })] })] })] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("id") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The unique entity ID.", "label": "ID"}) [INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"label": "Birth Information", "description": "This holds information about a birth."}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("ID") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("full_name") [INFO] [stdout] 🚀🚀🚀 tag_expr = Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "fields" }) }) [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The full name of the person", "label": "Full Name"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("String") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("birthday") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "Birthday", "description": "The birthday itself."}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("LocalDate") [INFO] [stdout] 🚀🚀🚀 outer_array_expr = Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "id" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The unique entity ID." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "ID" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "full_name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Full Name" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The full name of the person" }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "String" }) })] })] }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "name" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "documentation" }) }), Comma, Array(ExprArray { attrs: [], bracket_token: Bracket, elems: [Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "label" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "Birthday" }) })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "description" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "The birthday itself." }) })] })] })] }), Comma, Tuple(ExprTuple { attrs: [], paren_token: Paren, elems: [Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "type" }) }), Comma, Lit(ExprLit { attrs: [], lit: Str(LitStr { token: "LocalDate" }) })] })] })] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("id") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "ID", "description": "The unique entity ID."}) [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [("id", {"description": "The unique entity ID.", "label": "ID"}, "ID"), ("full_name", {"description": "The full name of the person", "label": "Full Name"}, "String"), ("birthday", {"label": "Birthday", "description": "The birthday itself."}, "LocalDate")])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"description": "The unique entity ID.", "label": "ID"}, "ID"), ("full_name", {"description": "The full name of the person", "label": "Full Name"}, "String"), ("birthday", {"label": "Birthday", "description": "The birthday itself."}, "LocalDate")] [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("ID") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("full_name") [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"label": "Full Name", "description": "The full name of the person"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("String") [INFO] [stdout] 🚀🚀🚀 >>> opt_name_kv = Ok("birthday") [INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"description": "The unique entity ID.", "label": "ID"} "ID" [INFO] [stdout] 🚀🚀🚀 compiling field: "full_name" {"description": "The full name of the person", "label": "Full Name"} "String" [INFO] [stdout] 🚀🚀🚀 compiling field: "birthday" {"label": "Birthday", "description": "The birthday itself."} "LocalDate" [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("Birth"), documentation: Documentation { label: "Birth Information", description: "This holds information about a birth." }, fields: [FieldDeclaration { name: Literal("id"), documentation: Documentation { label: "ID", description: "The unique entity ID." }, field_type: Primitive(Id) }, FieldDeclaration { name: Literal("full_name"), documentation: Documentation { label: "Full Name", description: "The full name of the person" }, field_type: Primitive(String) }, FieldDeclaration { name: Literal("birthday"), documentation: Documentation { label: "Birthday", description: "The birthday itself." }, field_type: Primitive(LocalDate) }] }) [INFO] [stdout] 🚀🚀🚀 >>> opt_docs = Ok({"description": "The birthday itself.", "label": "Birthday"}) [INFO] [stdout] 🚀🚀🚀 >>> opt_type = Ok("LocalDate") [INFO] [stdout] 🚀🚀🚀 compiling a RECORD type with fields: Ok(("fields", [("id", {"label": "ID", "description": "The unique entity ID."}, "ID"), ("full_name", {"label": "Full Name", "description": "The full name of the person"}, "String"), ("birthday", {"description": "The birthday itself.", "label": "Birthday"}, "LocalDate")])) [INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"label": "ID", "description": "The unique entity ID."}, "ID"), ("full_name", {"label": "Full Name", "description": "The full name of the person"}, "String"), ("birthday", {"description": "The birthday itself.", "label": "Birthday"}, "LocalDate")] [INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"label": "ID", "description": "The unique entity ID."} "ID" [INFO] [stdout] 🚀🚀🚀 compiling field: "full_name" {"label": "Full Name", "description": "The full name of the person"} "String" [INFO] [stdout] 🚀🚀🚀 compiling field: "birthday" {"description": "The birthday itself.", "label": "Birthday"} "LocalDate" [INFO] [stdout] 📝 generating code... [INFO] [stdout] 🚀🚀🚀 meta-model: RecordDeclarationExpr(RecordDeclaration { name: Literal("Birth"), documentation: Documentation { label: "Birth Information", description: "This holds information about a birth." }, fields: [FieldDeclaration { name: Literal("id"), documentation: Documentation { label: "ID", description: "The unique entity ID." }, field_type: Primitive(Id) }, FieldDeclaration { name: Literal("full_name"), documentation: Documentation { label: "Full Name", description: "The full name of the person" }, field_type: Primitive(String) }, FieldDeclaration { name: Literal("birthday"), documentation: Documentation { label: "Birthday", description: "The birthday itself." }, field_type: Primitive(LocalDate) }] }) [INFO] [stdout] 🚀🚀🚀 code: struct Birth [INFO] [stdout] { pub id : u64, pub full_name : String, pub birthday : time :: Date } impl [INFO] [stdout] Birth [INFO] [stdout] { [INFO] [stdout] pub fn new(id : u64, full_name : String, birthday : time :: Date) -> Self [INFO] [stdout] { Self { id : id, full_name : full_name, birthday : birthday } } [INFO] [stdout] } impl std :: convert :: From < Birth > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : Birth) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("Birth Information", "This holds information about a birth."), [INFO] [stdout] values : vec! [INFO] [stdout] [(metamodel :: DisplayableValue :: Id(item.id), metamodel :: [INFO] [stdout] Documentation :: new("ID", "The unique entity ID.")), [INFO] [stdout] (metamodel :: DisplayableValue :: [INFO] [stdout] String(String :: from(item.full_name)), metamodel :: Documentation [INFO] [stdout] :: new("Full Name", "The full name of the person")), [INFO] [stdout] (metamodel :: DisplayableValue :: LocalDate(item.birthday), [INFO] [stdout] metamodel :: Documentation :: [INFO] [stdout] new("Birthday", "The birthday itself."))], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stdout] 🚀🚀🚀 code: struct Birth [INFO] [stdout] { pub id : u64, pub full_name : String, pub birthday : time :: Date } impl [INFO] [stdout] Birth [INFO] [stdout] { [INFO] [stdout] pub fn new(id : u64, full_name : String, birthday : time :: Date) -> Self [INFO] [stdout] { Self { id : id, full_name : full_name, birthday : birthday } } [INFO] [stdout] } impl std :: convert :: From < Birth > for metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] fn from(item : Birth) -> metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] metamodel :: Displayable [INFO] [stdout] { [INFO] [stdout] documentation : Documentation :: [INFO] [stdout] new("Birth Information", "This holds information about a birth."), [INFO] [stdout] values : vec! [INFO] [stdout] [(metamodel :: DisplayableValue :: Id(item.id), metamodel :: [INFO] [stdout] Documentation :: new("ID", "The unique entity ID.")), [INFO] [stdout] (metamodel :: DisplayableValue :: [INFO] [stdout] String(String :: from(item.full_name)), metamodel :: Documentation [INFO] [stdout] :: new("Full Name", "The full name of the person")), [INFO] [stdout] (metamodel :: DisplayableValue :: LocalDate(item.birthday), [INFO] [stdout] metamodel :: Documentation :: [INFO] [stdout] new("Birthday", "The birthday itself."))], [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] } [INFO] [stdout] 🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 macro completed. [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 29.39s [INFO] running `Command { std: "docker" "inspect" "7630dad96165c09fa9e55870c85ea6446355551eee382853043c04406837d6dc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7630dad96165c09fa9e55870c85ea6446355551eee382853043c04406837d6dc", kill_on_drop: false }` [INFO] [stdout] 7630dad96165c09fa9e55870c85ea6446355551eee382853043c04406837d6dc