[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 master#5518eaa946291f00471af8b254b2a1715f234882 for pr-120393
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmjul%2Frust-metaprogramming-lab" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/mjul/rust-metaprogramming-lab on toolchain 5518eaa946291f00471af8b254b2a1715f234882
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[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-4-tc1/source/Cargo.toml
[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" "+5518eaa946291f00471af8b254b2a1715f234882" "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]     Updating crates.io index
[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-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/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:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] bfc25a2f41589b28e733ebf5e5a62f29c82eb21fff7023878c64a28b9ba70e0d
[INFO] running `Command { std: "docker" "start" "-a" "bfc25a2f41589b28e733ebf5e5a62f29c82eb21fff7023878c64a28b9ba70e0d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "bfc25a2f41589b28e733ebf5e5a62f29c82eb21fff7023878c64a28b9ba70e0d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "bfc25a2f41589b28e733ebf5e5a62f29c82eb21fff7023878c64a28b9ba70e0d", kill_on_drop: false }`
[INFO] [stdout] bfc25a2f41589b28e733ebf5e5a62f29c82eb21fff7023878c64a28b9ba70e0d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/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:2788e3201cd34a07e3172128adcd8b3090168a8e3bcc40d7c032b9dda1df7d1c" "/opt/rustwide/cargo-home/bin/cargo" "+5518eaa946291f00471af8b254b2a1715f234882" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 74ff478292048532abf8ae9be1860a985adb0a59daa11c733cd27c91a83056c8
[INFO] running `Command { std: "docker" "start" "-a" "74ff478292048532abf8ae9be1860a985adb0a59daa11c733cd27c91a83056c8", 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 libc v0.2.126
[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 num_threads v0.1.6
[INFO] [stderr]     Checking itoa v1.0.2
[INFO] [stderr]    Compiling unicode-ident v1.0.1
[INFO] [stderr]    Compiling cc v1.0.73
[INFO] [stderr]    Compiling crossbeam-utils v0.8.10
[INFO] [stderr]     Checking cfg-if v1.0.0
[INFO] [stderr]     Checking once_cell v1.13.0
[INFO] [stderr]     Checking lazy_static v1.4.0
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking ttf-parser v0.15.2
[INFO] [stderr]    Compiling metaprogramming_lab v0.1.0 (/opt/rustwide/workdir/metaprogramming_lab)
[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]    Compiling metamodel v0.1.0 (/opt/rustwide/workdir/metamodel)
[INFO] [stderr]     Checking metamodel_macros v0.1.0 (/opt/rustwide/workdir/metamodel_macros)
[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({"description": "A Bar is a very important entity with just and ID.", "label": "Bar Record"})
[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({"description": "A Baz is a very important entity with two fields.", "label": "Baz Record"})
[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({"label": "ID", "description": "The unique Bar entity 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", {"label": "ID", "description": "The unique Bar entity ID."}, "ID"), ("birthday", {"description": "The birthday for this Baz.", "label": "Birthday"}, "LocalDate")]))
[INFO] [stdout] 🚀🚀🚀 compiling fields: [("id", {"label": "ID", "description": "The unique Bar entity ID."}, "ID"), ("birthday", {"description": "The birthday for this Baz.", "label": "Birthday"}, "LocalDate")]
[INFO] [stdout] 🚀🚀🚀 compiling field: "id" {"label": "ID", "description": "The unique Bar entity 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({"label": "All Field Types", "description": "This record has fields of all 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({"label": "ID", "description": "The unique Entity 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", {"label": "ID", "description": "The unique Entity 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", {"label": "ID", "description": "The unique Entity 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" {"label": "ID", "description": "The unique Entity 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({"description": "This holds information about a birth.", "label": "Birth Information"})
[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] 🚀🚀🚀 compiling a RECORD type!
[INFO] [stdout] 🚀🚀🚀 parsing an ARRAY with name and documentation!
[INFO] [stdout] 🚀🚀🚀 name: Ok("Birth")
[INFO] [stdout] 🚀🚀🚀 docs_map: Ok({"description": "This holds information about a birth.", "label": "Birth Information"})
[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({"description": "The unique entity ID.", "label": "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({"description": "The birthday itself.", "label": "Birthday"})
[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"), ("full_name", {"description": "The full name of the person", "label": "Full Name"}, "String"), ("birthday", {"description": "The birthday itself.", "label": "Birthday"}, "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", {"description": "The birthday itself.", "label": "Birthday"}, "LocalDate")]
[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" {"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] 🚀🚀🚀 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({"description": "The unique entity ID.", "label": "ID"})
[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] 🚀🚀🚀 >>> 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", {"description": "The unique entity ID.", "label": "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", {"description": "The unique entity ID.", "label": "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" {"description": "The unique entity ID.", "label": "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 [unoptimized + debuginfo] target(s) in 31.05s
[INFO] running `Command { std: "docker" "inspect" "74ff478292048532abf8ae9be1860a985adb0a59daa11c733cd27c91a83056c8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "74ff478292048532abf8ae9be1860a985adb0a59daa11c733cd27c91a83056c8", kill_on_drop: false }`
[INFO] [stdout] 74ff478292048532abf8ae9be1860a985adb0a59daa11c733cd27c91a83056c8
