diff --git a/.gitignore b/.gitignore index 5900fc1e3..38d616555 100644 --- a/.gitignore +++ b/.gitignore @@ -69,8 +69,6 @@ stats.json # rust **/*.rs.bk -libraries/json2capnp/target -libraries/json2capnp/testData services/json2capnp/target services/json2capnp/testData diff --git a/services/json2capnp/.gitignore b/services/json2capnp/.gitignore new file mode 100644 index 000000000..d53da66b2 --- /dev/null +++ b/services/json2capnp/.gitignore @@ -0,0 +1,6 @@ +/target +# exclude everything in every folder +/test/**/*.* + +# include only .gitkeep files +!/test/**/*.gitkeep \ No newline at end of file diff --git a/services/json2capnp/Cargo.lock b/services/json2capnp/Cargo.lock new file mode 100644 index 000000000..ffe72424d --- /dev/null +++ b/services/json2capnp/Cargo.lock @@ -0,0 +1,1361 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "as-slice" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4d1c23475b74e3672afa8c2be22040b8b7783ad9b461021144ed10a46bb0e6" +dependencies = [ + "generic-array 0.12.4", + "generic-array 0.13.2", + "generic-array 0.14.4", + "stable_deref_trait", +] + +[[package]] +name = "ascii" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97be891acc47ca214468e09425d02cef3af2c94d0d82081cd02061f996802f14" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" +dependencies = [ + "byteorder", + "safemem", +] + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "blake2b_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "brotli-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "brotli2" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" +dependencies = [ + "brotli-sys", + "libc", +] + +[[package]] +name = "buf_redux" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" +dependencies = [ + "memchr", + "safemem", +] + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "capnp" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee33f13b9419d35f9ae6e0ee2e5ef6bd059a4d0da2fda16a88ddaf57dfe9acca" + +[[package]] +name = "cc" +version = "1.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95752358c8f7552394baf48cd82695b345628ad3f170d607de3ca03b8dacca15" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "chunked_transfer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498d20a7aaf62625b9bf26e637cf7736417cde1d0c99f1d04d1170229a85cf87" + +[[package]] +name = "clap" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "indexmap", + "lazy_static", + "os_str_bytes", + "strsim", + "termcolor", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap_derive" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "370f715b81112975b1b69db93e0b56ea4cd4e5002ac43b2da8474106a54096a1" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +dependencies = [ + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "ctor" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbaabec2c953050352311293be5c6aba8e141ba19d6811862b232d6fd020484" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +dependencies = [ + "adler32", + "byteorder", + "gzip-header", +] + +[[package]] +name = "difference" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" + +[[package]] +name = "dirs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "filetime" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "winapi", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check 0.9.2", +] + +[[package]] +name = "geo" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479219490dcbbf2a374908457df0b4d5b1d8eb62eb48b0ee897f9af9e7c44210" +dependencies = [ + "geo-types", + "geographiclib-rs", + "num-traits", + "robust", + "rstar", +] + +[[package]] +name = "geo-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6b362f0f09b4ff7ad8210f806f80ab6d0d895365a6830cb504267aeccfe3f43" +dependencies = [ + "approx", + "num-traits", + "rstar", +] + +[[package]] +name = "geobuf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33316a0902c5174170b5c3ba7dc8b5b9682e68d408d29b09fb4aa6e92fb43169" +dependencies = [ + "clap", + "protobuf", + "serde_json", +] + +[[package]] +name = "geographiclib-rs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b78e20d5d868fa2c4182a8170cb4df261e781a605810e3c1500269c1907da461" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "geojson" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a510a4ab1fbcc4058e030c438838ae3bc660065009d3bc3ad2a2e4658b3d0cf3" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gzip-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" +dependencies = [ + "crc32fast", +] + +[[package]] +name = "hash32" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "heapless" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74911a68a1658cfcfb61bc0ccfbd536e3b6e906f8c2f7883ee50157e3e2184f1" +dependencies = [ + "as-slice", + "generic-array 0.13.2", + "hash32", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "home" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" +dependencies = [ + "winapi", +] + +[[package]] +name = "httparse" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" +dependencies = [ + "autocfg 1.0.1", + "hashbrown", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "json" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" + +[[package]] +name = "json2capnp" +version = "0.2.0" +dependencies = [ + "capnp", + "dotenv", + "geo", + "geobuf", + "geojson", + "home", + "json", + "polyline", + "pretty_assertions", + "protobuf", + "regex", + "rouille", + "serde_json", + "uuid", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" + +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +dependencies = [ + "log 0.4.11", +] + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "mime" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +dependencies = [ + "log 0.3.9", +] + +[[package]] +name = "mime_guess" +version = "1.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216929a5ee4dd316b1702eedf5e74548c123d370f47841ceaac38ca154690ca3" +dependencies = [ + "mime", + "phf", + "phf_codegen", + "unicase", +] + +[[package]] +name = "multipart" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adba94490a79baf2d6a23eac897157047008272fa3eecb3373ae6377b91eca28" +dependencies = [ + "buf_redux", + "httparse", + "log 0.4.11", + "mime", + "mime_guess", + "quick-error", + "rand 0.4.6", + "safemem", + "tempdir", + "twoway", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg 1.0.1", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg 1.0.1", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "os_str_bytes" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" + +[[package]] +name = "output_vt100" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +dependencies = [ + "winapi", +] + +[[package]] +name = "pdqselect" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27" + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + +[[package]] +name = "phf" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" +dependencies = [ + "phf_shared", + "rand 0.6.5", +] + +[[package]] +name = "phf_shared" +version = "0.7.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" +dependencies = [ + "siphasher", + "unicase", +] + +[[package]] +name = "polyline" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4fb271c371b801041a8eaa6046cf694f84dd21817610f5ba962efd273f47779" +dependencies = [ + "geo-types", +] + +[[package]] +name = "pretty_assertions" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f81e1644e1b54f5a68959a29aa86cde704219254669da328ecfdf6a1f09d427" +dependencies = [ + "ansi_term", + "ctor", + "difference", + "output_vt100", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check 0.9.2", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check 0.9.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "protobuf" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f72884896d22e0da0e5b266cb9a780b791f6c3b2f5beab6368d6cd4f0dbb86" + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "winapi", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha", + "rand_core 0.4.2", + "rand_hc", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.3.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_users" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +dependencies = [ + "getrandom", + "redox_syscall", + "rust-argon2", +] + +[[package]] +name = "regex" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "robust" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1a6eb3bd241993b09a354047bfba030778b347ac4de4bc0fd80e531e7cbfac8" + +[[package]] +name = "rouille" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112568052ec17fa26c6c11c40acbb30d3ad244bf3d6da0be181f5e7e42e5004f" +dependencies = [ + "base64 0.9.3", + "brotli2", + "chrono", + "deflate", + "filetime", + "multipart", + "num_cpus", + "rand 0.5.6", + "serde", + "serde_derive", + "serde_json", + "sha1", + "term", + "threadpool", + "time", + "tiny_http", + "url", +] + +[[package]] +name = "rstar" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9a31b6d446dcdf5b1c9677068e147bd86ce5efcdbce4741f0b55d747381924" +dependencies = [ + "heapless", + "num-traits", + "pdqselect", + "smallvec", +] + +[[package]] +name = "rust-argon2" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +dependencies = [ + "base64 0.13.0", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "serde" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "siphasher" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" + +[[package]] +name = "smallvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c1e438504729046a5cfae47f97c30d6d083c7d91d94603efdae3477fc070d4c" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +dependencies = [ + "rand 0.4.6", + "remove_dir_all", +] + +[[package]] +name = "term" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +dependencies = [ + "byteorder", + "dirs", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tiny_http" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1661fa0a44c95d01604bd05c66732a446c657efb62b5164a7a083a3b552b4951" +dependencies = [ + "ascii", + "chrono", + "chunked_transfer", + "log 0.4.11", + "url", +] + +[[package]] +name = "tinyvec" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf8dbc19eb42fba10e8feaaec282fb50e2c14b2726d6301dbfeed0f73306a6f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "twoway" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" +dependencies = [ + "memchr", +] + +[[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" + +[[package]] +name = "unicase" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +dependencies = [ + "version_check 0.1.5", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/services/json2capnp/Cargo.toml b/services/json2capnp/Cargo.toml new file mode 100644 index 000000000..5e302f1f5 --- /dev/null +++ b/services/json2capnp/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "json2capnp" +version = "0.2.0" +authors = ["Pierre-Léo Bourbonnais "] +edition = "2018" + +[dependencies] +json = "0.12" +capnp = "0.14" +rouille = "3.0" +serde_json = "1.0" +uuid = "0.8" +dotenv = "0.15" +home = "0.5" +polyline = "0.9" +geo = "0.17.0" +geojson = "0.22.0" +geobuf = "0.1" +protobuf = "2.22.0" +regex = "1.5.5" + +[dev-dependencies] +pretty_assertions = "0.6" \ No newline at end of file diff --git a/services/json2capnp/src/capnp/_generating_classes.txt b/services/json2capnp/src/capnp/_generating_classes.txt new file mode 100644 index 000000000..884bb7edf --- /dev/null +++ b/services/json2capnp/src/capnp/_generating_classes.txt @@ -0,0 +1,4 @@ +cargo install capnpc + +cd /packages/transition-backend/src/models/capnpDataModel/capnpFiles/ +capnp compile -orust:../../../../../../services/json2capnp/src/capnp/ *.capnp diff --git a/services/json2capnp/src/capnp/agencyCollection_capnp.rs b/services/json2capnp/src/capnp/agencyCollection_capnp.rs new file mode 100644 index 000000000..84d113680 --- /dev/null +++ b/services/json2capnp/src/capnp/agencyCollection_capnp.rs @@ -0,0 +1,452 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: agencyCollection.capnp + + +pub mod agency { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_acronym(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_acronym(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_simulation_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_simulation_uuid(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_acronym(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_acronym(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_acronym(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_acronym(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_simulation_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_simulation_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_simulation_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_simulation_uuid(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 8 }; + pub const TYPE_ID: u64 = 0xa7fa_c5bd_f8e5_0062; + } +} + +pub mod agency_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_agencies(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::agencyCollection_capnp::agency::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_agencies(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_agencies(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::agencyCollection_capnp::agency::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_agencies(&mut self, value: ::capnp::struct_list::Reader<'a,crate::agencyCollection_capnp::agency::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_agencies(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::agencyCollection_capnp::agency::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_agencies(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0x95bc_8edf_88b9_b4fe; + } +} diff --git a/services/json2capnp/src/capnp/dataSourceCollection_capnp.rs b/services/json2capnp/src/capnp/dataSourceCollection_capnp.rs new file mode 100644 index 000000000..1c50adfc8 --- /dev/null +++ b/services/json2capnp/src/capnp/dataSourceCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: dataSourceCollection.capnp + + +pub mod data_source_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_data_sources(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::dataSource_capnp::data_source::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_data_sources(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_data_sources(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::dataSource_capnp::data_source::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_data_sources(&mut self, value: ::capnp::struct_list::Reader<'a,crate::dataSource_capnp::data_source::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_data_sources(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::dataSource_capnp::data_source::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_data_sources(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xc67c_47e5_6cc5_fbb5; + } +} diff --git a/services/json2capnp/src/capnp/dataSource_capnp.rs b/services/json2capnp/src/capnp/dataSource_capnp.rs new file mode 100644 index 000000000..62c2e65a6 --- /dev/null +++ b/services/json2capnp/src/capnp/dataSource_capnp.rs @@ -0,0 +1,302 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: dataSource.capnp + + +pub mod data_source { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_type(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(0)) + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_shortname(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(2) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_type(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(0)) + } + #[inline] + pub fn set_type(&mut self, value: crate::dataSource_capnp::data_source::Type) { + self.builder.set_data_field::(0, value as u16) + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_shortname(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(2, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 5 }; + pub const TYPE_ID: u64 = 0xee00_ca0f_945a_8ac0; + } + + #[repr(u16)] + #[derive(Clone, Copy, Debug, PartialEq)] + pub enum Type { + None = 0, + Other = 1, + Gtfs = 2, + OdTrips = 3, + TransitSmartCardData = 4, + TransitOperationalData = 5, + TaxiTransactions = 6, + CarSharingTransactions = 7, + BikeSharingTransactions = 8, + GpsTraces = 9, + StreetSegmentSpeeds = 10, + Zones = 11, + OsmData = 12, + Places = 13, + Unknown = 14, + } + impl ::capnp::traits::FromU16 for Type { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Type::None), + 1 => ::core::result::Result::Ok(Type::Other), + 2 => ::core::result::Result::Ok(Type::Gtfs), + 3 => ::core::result::Result::Ok(Type::OdTrips), + 4 => ::core::result::Result::Ok(Type::TransitSmartCardData), + 5 => ::core::result::Result::Ok(Type::TransitOperationalData), + 6 => ::core::result::Result::Ok(Type::TaxiTransactions), + 7 => ::core::result::Result::Ok(Type::CarSharingTransactions), + 8 => ::core::result::Result::Ok(Type::BikeSharingTransactions), + 9 => ::core::result::Result::Ok(Type::GpsTraces), + 10 => ::core::result::Result::Ok(Type::StreetSegmentSpeeds), + 11 => ::core::result::Result::Ok(Type::Zones), + 12 => ::core::result::Result::Ok(Type::OsmData), + 13 => ::core::result::Result::Ok(Type::Places), + 14 => ::core::result::Result::Ok(Type::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Type { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Type { + #[inline] + fn type_id() -> u64 { 0xceb6_8454_bdec_07b7u64 } + } +} diff --git a/services/json2capnp/src/capnp/garageCollection_capnp.rs b/services/json2capnp/src/capnp/garageCollection_capnp.rs new file mode 100644 index 000000000..a40eb6a55 --- /dev/null +++ b/services/json2capnp/src/capnp/garageCollection_capnp.rs @@ -0,0 +1,464 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: garageCollection.capnp + + +pub mod garage { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> i32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_agency_uuid(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_geography(self) -> ::capnp::Result<::capnp::data::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_geography(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(5) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> i32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: i32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_agency_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_agency_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_agency_uuid(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_geography(self) -> ::capnp::Result<::capnp::data::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_geography(&mut self, value: ::capnp::data::Reader<'_>) { + self.builder.get_pointer_field(5).set_data(value); + } + #[inline] + pub fn init_geography(self, size: u32) -> ::capnp::data::Builder<'a> { + self.builder.get_pointer_field(5).init_data(size) + } + pub fn has_geography(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(5, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 8 }; + pub const TYPE_ID: u64 = 0xc06e_ec7b_96b2_4ad1; + } +} + +pub mod garage_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_garages(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::garageCollection_capnp::garage::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_garages(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_garages(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::garageCollection_capnp::garage::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_garages(&mut self, value: ::capnp::struct_list::Reader<'a,crate::garageCollection_capnp::garage::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_garages(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::garageCollection_capnp::garage::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_garages(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0x9f69_d60c_92b8_e3f6; + } +} diff --git a/services/json2capnp/src/capnp/householdCollection_capnp.rs b/services/json2capnp/src/capnp/householdCollection_capnp.rs new file mode 100644 index 000000000..4d9c63579 --- /dev/null +++ b/services/json2capnp/src/capnp/householdCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: householdCollection.capnp + + +pub mod household_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_households(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::household_capnp::household::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_households(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_households(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::household_capnp::household::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_households(&mut self, value: ::capnp::struct_list::Reader<'a,crate::household_capnp::household::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_households(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::household_capnp::household::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_households(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xa2c2_f338_a869_f976; + } +} diff --git a/services/json2capnp/src/capnp/household_capnp.rs b/services/json2capnp/src/capnp/household_capnp.rs new file mode 100644 index 000000000..8557238d6 --- /dev/null +++ b/services/json2capnp/src/capnp/household_capnp.rs @@ -0,0 +1,461 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: household.capnp + + +pub mod household { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_expansion_factor(self) -> f32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_size(self) -> i8 { + self.reader.get_data_field::(8) + } + #[inline] + pub fn get_car_number(self) -> i8 { + self.reader.get_data_field::(9) + } + #[inline] + pub fn get_income_level(self) -> i32 { + self.reader.get_data_field::(3) + } + #[inline] + pub fn get_income_level_group(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(5)) + } + #[inline] + pub fn get_category(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(8)) + } + #[inline] + pub fn get_home_latitude(self) -> i32 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_home_longitude(self) -> i32 { + self.reader.get_data_field::(6) + } + #[inline] + pub fn get_home_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_home_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_home_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_home_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_home_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_home_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(18) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_data_source_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_data_source_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_expansion_factor(self) -> f32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_expansion_factor(&mut self, value: f32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_size(self) -> i8 { + self.builder.get_data_field::(8) + } + #[inline] + pub fn set_size(&mut self, value: i8) { + self.builder.set_data_field::(8, value); + } + #[inline] + pub fn get_car_number(self) -> i8 { + self.builder.get_data_field::(9) + } + #[inline] + pub fn set_car_number(&mut self, value: i8) { + self.builder.set_data_field::(9, value); + } + #[inline] + pub fn get_income_level(self) -> i32 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_income_level(&mut self, value: i32) { + self.builder.set_data_field::(3, value); + } + #[inline] + pub fn get_income_level_group(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(5)) + } + #[inline] + pub fn set_income_level_group(&mut self, value: crate::household_capnp::household::IncomeLevelGroup) { + self.builder.set_data_field::(5, value as u16) + } + #[inline] + pub fn get_category(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(8)) + } + #[inline] + pub fn set_category(&mut self, value: crate::household_capnp::household::Category) { + self.builder.set_data_field::(8, value as u16) + } + #[inline] + pub fn get_home_latitude(self) -> i32 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_home_latitude(&mut self, value: i32) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_home_longitude(self) -> i32 { + self.builder.get_data_field::(6) + } + #[inline] + pub fn set_home_longitude(&mut self, value: i32) { + self.builder.set_data_field::(6, value); + } + #[inline] + pub fn get_home_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_home_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(2), value, false) + } + #[inline] + pub fn init_home_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(2), size) + } + pub fn has_home_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_home_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_home_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(3), value, false) + } + #[inline] + pub fn init_home_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(3), size) + } + pub fn has_home_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_home_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_home_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(4), value, false) + } + #[inline] + pub fn init_home_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(4), size) + } + pub fn has_home_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(18) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(18, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 4, pointers: 7 }; + pub const TYPE_ID: u64 = 0xf185_6a7a_7d8f_d18f; + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum IncomeLevelGroup { + None = 0, + VeryLow = 1, + Low = 2, + Medium = 3, + High = 4, + VeryHigh = 5, + Unknown = 6, + } + impl ::capnp::traits::FromU16 for IncomeLevelGroup { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(IncomeLevelGroup::None), + 1 => ::core::result::Result::Ok(IncomeLevelGroup::VeryLow), + 2 => ::core::result::Result::Ok(IncomeLevelGroup::Low), + 3 => ::core::result::Result::Ok(IncomeLevelGroup::Medium), + 4 => ::core::result::Result::Ok(IncomeLevelGroup::High), + 5 => ::core::result::Result::Ok(IncomeLevelGroup::VeryHigh), + 6 => ::core::result::Result::Ok(IncomeLevelGroup::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for IncomeLevelGroup { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for IncomeLevelGroup { + #[inline] + fn type_id() -> u64 { 0x9aaa_ce5f_6d67_0889u64 } + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Category { + None = 0, + SinglePerson = 1, + Couple = 2, + MonoparentalFamily = 3, + BiparentalFamily = 4, + Other = 5, + Unknown = 6, + } + impl ::capnp::traits::FromU16 for Category { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Category::None), + 1 => ::core::result::Result::Ok(Category::SinglePerson), + 2 => ::core::result::Result::Ok(Category::Couple), + 3 => ::core::result::Result::Ok(Category::MonoparentalFamily), + 4 => ::core::result::Result::Ok(Category::BiparentalFamily), + 5 => ::core::result::Result::Ok(Category::Other), + 6 => ::core::result::Result::Ok(Category::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Category { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Category { + #[inline] + fn type_id() -> u64 { 0xceb6_6461_0adc_2cc4u64 } + } +} diff --git a/services/json2capnp/src/capnp/include.rs b/services/json2capnp/src/capnp/include.rs new file mode 100644 index 000000000..ee0a33771 --- /dev/null +++ b/services/json2capnp/src/capnp/include.rs @@ -0,0 +1,126 @@ +// transition: +#[allow(non_snake_case)] +pub mod odTrip_capnp { + include!("./odTrip_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod odTripCollection_capnp { + include!("./odTripCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod node_capnp { + include!("./node_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod nodeCollection_capnp { + include!("./nodeCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod dataSource_capnp { + include!("./dataSource_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod dataSourceCollection_capnp { + include!("./dataSourceCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod person_capnp { + include!("./person_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod personCollection_capnp { + include!("./personCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod household_capnp { + include!("./household_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod householdCollection_capnp { + include!("./householdCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod line_capnp { + include!("./line_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod lineCollection_capnp { + include!("./lineCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod pathCollection_capnp { + include!("./pathCollection_capnp.rs"); +} + +/*#[allow(non_snake_case)] +pub mod stationCollection_capnp { + include!("./stationCollection_capnp.rs"); +}*/ + +#[allow(non_snake_case)] +pub mod serviceCollection_capnp { + include!("./serviceCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod scenarioCollection_capnp { + include!("./scenarioCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod agencyCollection_capnp { + include!("./agencyCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod place_capnp { + include!("./place_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod placeCollection_capnp { + include!("./placeCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod garageCollection_capnp { + include!("./garageCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod unitCollection_capnp { + include!("./unitCollection_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod zone_capnp { + include!("./zone_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod zoneCollection_capnp { + include!("./zoneCollection_capnp.rs"); +} + +// octavi: +#[allow(non_snake_case)] +pub mod taxiPoint_capnp { + include!("./octavi/taxiPoint_capnp.rs"); +} + +#[allow(non_snake_case)] +pub mod taxiPointCollection_capnp { + include!("./octavi/taxiPointCollection_capnp.rs"); +} diff --git a/services/json2capnp/src/capnp/lineCollection_capnp.rs b/services/json2capnp/src/capnp/lineCollection_capnp.rs new file mode 100644 index 000000000..857083b14 --- /dev/null +++ b/services/json2capnp/src/capnp/lineCollection_capnp.rs @@ -0,0 +1,520 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: lineCollection.capnp + + +pub mod line { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_mode(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_mode(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_category(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_category(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_agency_uuid(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_shortname(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_longname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_longname(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_autonomous(self) -> i8 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_allow_same_line_transfers(self) -> i8 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(3) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_mode(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_mode(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_mode(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_mode(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_category(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_category(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_category(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_category(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_agency_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_agency_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_agency_uuid(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_shortname(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_longname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_longname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_longname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_longname(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(8).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(8).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(9).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(9).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_autonomous(self) -> i8 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_is_autonomous(&mut self, value: i8) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_allow_same_line_transfers(self) -> i8 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_allow_same_line_transfers(&mut self, value: i8) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(3, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 10 }; + pub const TYPE_ID: u64 = 0xd269_e1b8_43a7_3de0; + } +} + +pub mod line_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_lines(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::lineCollection_capnp::line::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_lines(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_lines(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::lineCollection_capnp::line::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_lines(&mut self, value: ::capnp::struct_list::Reader<'a,crate::lineCollection_capnp::line::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_lines(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::lineCollection_capnp::line::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_lines(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xad1e_031b_6a61_573b; + } +} diff --git a/services/json2capnp/src/capnp/line_capnp.rs b/services/json2capnp/src/capnp/line_capnp.rs new file mode 100644 index 000000000..1c9b16028 --- /dev/null +++ b/services/json2capnp/src/capnp/line_capnp.rs @@ -0,0 +1,1266 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: line.capnp + + +pub mod trip { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_path_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_path_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_departure_time_seconds(self) -> i32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_arrival_time_seconds(self) -> i32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_node_arrival_times_seconds(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i32>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_node_arrival_times_seconds(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_node_departure_times_seconds(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i32>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_node_departure_times_seconds(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_nodes_can_board(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i8>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_nodes_can_board(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_nodes_can_unboard(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i8>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_nodes_can_unboard(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_block_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_block_uuid(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_total_capacity(self) -> i16 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_seated_capacity(self) -> i16 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(12) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_path_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_path_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_path_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_path_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_departure_time_seconds(self) -> i32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_departure_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_arrival_time_seconds(self) -> i32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_arrival_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_node_arrival_times_seconds(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i32>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_node_arrival_times_seconds(&mut self, value: ::capnp::primitive_list::Reader<'a,i32>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(2), value, false) + } + #[inline] + pub fn init_node_arrival_times_seconds(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i32> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(2), size) + } + pub fn has_node_arrival_times_seconds(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_node_departure_times_seconds(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i32>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_node_departure_times_seconds(&mut self, value: ::capnp::primitive_list::Reader<'a,i32>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(3), value, false) + } + #[inline] + pub fn init_node_departure_times_seconds(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i32> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(3), size) + } + pub fn has_node_departure_times_seconds(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_nodes_can_board(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i8>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes_can_board(&mut self, value: ::capnp::primitive_list::Reader<'a,i8>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(4), value, false) + } + #[inline] + pub fn init_nodes_can_board(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i8> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(4), size) + } + pub fn has_nodes_can_board(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_nodes_can_unboard(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i8>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes_can_unboard(&mut self, value: ::capnp::primitive_list::Reader<'a,i8>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(5), value, false) + } + #[inline] + pub fn init_nodes_can_unboard(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i8> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(5), size) + } + pub fn has_nodes_can_unboard(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_block_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_block_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_block_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_block_uuid(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_total_capacity(self) -> i16 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_total_capacity(&mut self, value: i16) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_seated_capacity(self) -> i16 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_seated_capacity(&mut self, value: i16) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(12) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(12, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 2, pointers: 7 }; + pub const TYPE_ID: u64 = 0xaeeb_93dd_9760_9064; + } +} + +pub mod period { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_period_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_period_shortname(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_outbound_path_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_outbound_path_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_inbound_path_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_inbound_path_uuid(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_custom_start_at_seconds(self) -> i32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_start_at_seconds(self) -> i32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_end_at_seconds(self) -> i32 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_interval_seconds(self) -> i16 { + self.reader.get_data_field::(6) + } + #[inline] + pub fn get_number_of_units(self) -> i16 { + self.reader.get_data_field::(7) + } + #[inline] + pub fn get_trips(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::line_capnp::trip::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_trips(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(16) + } + #[inline] + pub fn get_custom_end_at_seconds(self) -> i32 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_period_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_period_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_period_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_period_shortname(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_outbound_path_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_outbound_path_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_outbound_path_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_outbound_path_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_inbound_path_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_inbound_path_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_inbound_path_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_inbound_path_uuid(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_custom_start_at_seconds(self) -> i32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_custom_start_at_seconds(&mut self, value: i32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_start_at_seconds(self) -> i32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_start_at_seconds(&mut self, value: i32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_end_at_seconds(self) -> i32 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_end_at_seconds(&mut self, value: i32) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_interval_seconds(self) -> i16 { + self.builder.get_data_field::(6) + } + #[inline] + pub fn set_interval_seconds(&mut self, value: i16) { + self.builder.set_data_field::(6, value); + } + #[inline] + pub fn get_number_of_units(self) -> i16 { + self.builder.get_data_field::(7) + } + #[inline] + pub fn set_number_of_units(&mut self, value: i16) { + self.builder.set_data_field::(7, value); + } + #[inline] + pub fn get_trips(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::line_capnp::trip::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_trips(&mut self, value: ::capnp::struct_list::Reader<'a,crate::line_capnp::trip::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(3), value, false) + } + #[inline] + pub fn init_trips(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::line_capnp::trip::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(3), size) + } + pub fn has_trips(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(16) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(16, value); + } + #[inline] + pub fn get_custom_end_at_seconds(self) -> i32 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_custom_end_at_seconds(&mut self, value: i32) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 3, pointers: 5 }; + pub const TYPE_ID: u64 = 0xddec_cfbe_fad4_3561; + } +} + +pub mod schedule { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_service_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_service_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_periods_group_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_periods_group_shortname(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_periods(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::line_capnp::period::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_periods(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_allow_seconds_based_schedules(self) -> i8 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(1) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_service_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_service_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_service_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_service_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_periods_group_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_periods_group_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_periods_group_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_periods_group_shortname(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_periods(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::line_capnp::period::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_periods(&mut self, value: ::capnp::struct_list::Reader<'a,crate::line_capnp::period::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(3), value, false) + } + #[inline] + pub fn init_periods(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::line_capnp::period::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(3), size) + } + pub fn has_periods(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_allow_seconds_based_schedules(self) -> i8 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_allow_seconds_based_schedules(&mut self, value: i8) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(1, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 4 }; + pub const TYPE_ID: u64 = 0xfa89_c34b_8ef9_7103; + } +} + +pub mod line { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_mode(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_mode(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_category(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_category(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_agency_uuid(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_shortname(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_longname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_longname(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_autonomous(self) -> i8 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_allow_same_line_transfers(self) -> i8 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_schedules(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::line_capnp::schedule::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_schedules(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(3) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_mode(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_mode(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_mode(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_mode(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_category(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_category(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_category(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_category(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_agency_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_agency_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_agency_uuid(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_shortname(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_longname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_longname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_longname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_longname(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(8).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(8).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(9).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(9).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_autonomous(self) -> i8 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_is_autonomous(&mut self, value: i8) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_allow_same_line_transfers(self) -> i8 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_allow_same_line_transfers(&mut self, value: i8) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_schedules(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::line_capnp::schedule::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_schedules(&mut self, value: ::capnp::struct_list::Reader<'a,crate::line_capnp::schedule::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(10), value, false) + } + #[inline] + pub fn init_schedules(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::line_capnp::schedule::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(10), size) + } + pub fn has_schedules(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(3, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 11 }; + pub const TYPE_ID: u64 = 0xc474_ebe8_d98c_347e; + } +} diff --git a/services/json2capnp/src/capnp/nodeCollection_capnp.rs b/services/json2capnp/src/capnp/nodeCollection_capnp.rs new file mode 100644 index 000000000..e66792b49 --- /dev/null +++ b/services/json2capnp/src/capnp/nodeCollection_capnp.rs @@ -0,0 +1,512 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: nodeCollection.capnp + + +pub mod node { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_code(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_code(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_station_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_station_uuid(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(12) + } + #[inline] + pub fn get_routing_radius_meters(self) -> i16 { + self.reader.get_data_field::(7) + } + #[inline] + pub fn get_default_dwell_time_seconds(self) -> i16 { + self.reader.get_data_field::(8) + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(13) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_code(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_code(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_code(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_code(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_latitude(&mut self, value: i32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_longitude(&mut self, value: i32) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_station_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_station_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_station_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_station_uuid(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(12) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(12, value); + } + #[inline] + pub fn get_routing_radius_meters(self) -> i16 { + self.builder.get_data_field::(7) + } + #[inline] + pub fn set_routing_radius_meters(&mut self, value: i16) { + self.builder.set_data_field::(7, value); + } + #[inline] + pub fn get_default_dwell_time_seconds(self) -> i16 { + self.builder.get_data_field::(8) + } + #[inline] + pub fn set_default_dwell_time_seconds(&mut self, value: i16) { + self.builder.set_data_field::(8, value); + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(13) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(13, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 3, pointers: 8 }; + pub const TYPE_ID: u64 = 0xae00_02d2_7ded_297e; + } +} + +pub mod node_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_nodes(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::nodeCollection_capnp::node::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_nodes(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_nodes(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::nodeCollection_capnp::node::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes(&mut self, value: ::capnp::struct_list::Reader<'a,crate::nodeCollection_capnp::node::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_nodes(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::nodeCollection_capnp::node::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_nodes(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xb033_26c4_149f_8dc8; + } +} diff --git a/services/json2capnp/src/capnp/node_capnp.rs b/services/json2capnp/src/capnp/node_capnp.rs new file mode 100644 index 000000000..56e9a7135 --- /dev/null +++ b/services/json2capnp/src/capnp/node_capnp.rs @@ -0,0 +1,443 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: node.capnp + + +pub mod node { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_code(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_code(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_station_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_station_uuid(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(12) + } + #[inline] + pub fn get_routing_radius_meters(self) -> i16 { + self.reader.get_data_field::(7) + } + #[inline] + pub fn get_default_dwell_time_seconds(self) -> i16 { + self.reader.get_data_field::(8) + } + #[inline] + pub fn get_transferable_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_transferable_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_transferable_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_transferable_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_transferable_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_transferable_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(13) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_code(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_code(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_code(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_code(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_latitude(&mut self, value: i32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_longitude(&mut self, value: i32) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_station_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_station_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_station_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_station_uuid(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(12) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(12, value); + } + #[inline] + pub fn get_routing_radius_meters(self) -> i16 { + self.builder.get_data_field::(7) + } + #[inline] + pub fn set_routing_radius_meters(&mut self, value: i16) { + self.builder.set_data_field::(7, value); + } + #[inline] + pub fn get_default_dwell_time_seconds(self) -> i16 { + self.builder.get_data_field::(8) + } + #[inline] + pub fn set_default_dwell_time_seconds(&mut self, value: i16) { + self.builder.set_data_field::(8, value); + } + #[inline] + pub fn get_transferable_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_transferable_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(8), value, false) + } + #[inline] + pub fn init_transferable_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(8), size) + } + pub fn has_transferable_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_transferable_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_transferable_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(9), value, false) + } + #[inline] + pub fn init_transferable_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(9), size) + } + pub fn has_transferable_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_transferable_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_transferable_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(10), value, false) + } + #[inline] + pub fn init_transferable_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(10), size) + } + pub fn has_transferable_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(13) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(13, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 3, pointers: 11 }; + pub const TYPE_ID: u64 = 0xcfb0_309e_1293_c2e3; + } +} diff --git a/services/json2capnp/src/capnp/octavi/taxiPointCollection_capnp.rs b/services/json2capnp/src/capnp/octavi/taxiPointCollection_capnp.rs new file mode 100644 index 000000000..272325698 --- /dev/null +++ b/services/json2capnp/src/capnp/octavi/taxiPointCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: octavi/taxiPointCollection.capnp + + +pub mod taxi_point_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_taxi_points(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::taxiPoint_capnp::taxi_point::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_taxi_points(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_taxi_points(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::taxiPoint_capnp::taxi_point::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_taxi_points(&mut self, value: ::capnp::struct_list::Reader<'a,crate::taxiPoint_capnp::taxi_point::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_taxi_points(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::taxiPoint_capnp::taxi_point::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_taxi_points(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0x860c_cd30_fd7b_045b; + } +} diff --git a/services/json2capnp/src/capnp/octavi/taxiPoint_capnp.rs b/services/json2capnp/src/capnp/octavi/taxiPoint_capnp.rs new file mode 100644 index 000000000..5d418fc84 --- /dev/null +++ b/services/json2capnp/src/capnp/octavi/taxiPoint_capnp.rs @@ -0,0 +1,299 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: octavi/taxiPoint.capnp + + +pub mod taxi_point { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_taxi_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_operator_id(self) -> u16 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_timestamp(self) -> u32 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_status(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(3)) + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.reader.get_data_field::(3) + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_speed(self) -> i16 { + self.reader.get_data_field::(10) + } + #[inline] + pub fn get_azimuth(self) -> i16 { + self.reader.get_data_field::(11) + } + #[inline] + pub fn get_device(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(12)) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_taxi_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_taxi_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_operator_id(self) -> u16 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_operator_id(&mut self, value: u16) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_timestamp(self) -> u32 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_timestamp(&mut self, value: u32) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_status(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(3)) + } + #[inline] + pub fn set_status(&mut self, value: crate::taxiPoint_capnp::taxi_point::Status) { + self.builder.set_data_field::(3, value as u16) + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_latitude(&mut self, value: i32) { + self.builder.set_data_field::(3, value); + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_longitude(&mut self, value: i32) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_speed(self) -> i16 { + self.builder.get_data_field::(10) + } + #[inline] + pub fn set_speed(&mut self, value: i16) { + self.builder.set_data_field::(10, value); + } + #[inline] + pub fn get_azimuth(self) -> i16 { + self.builder.get_data_field::(11) + } + #[inline] + pub fn set_azimuth(&mut self, value: i16) { + self.builder.set_data_field::(11, value); + } + #[inline] + pub fn get_device(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(12)) + } + #[inline] + pub fn set_device(&mut self, value: crate::taxiPoint_capnp::taxi_point::Device) { + self.builder.set_data_field::(12, value as u16) + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 4, pointers: 0 }; + pub const TYPE_ID: u64 = 0xbac8_2edb_9cfb_2f2b; + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Status { + None = 0, + Free = 1, + Occupied = 2, + Unavailable = 3, + Oncoming = 4, + Answering = 5, + Off = 6, + Other = 7, + Unknown = 8, + } + impl ::capnp::traits::FromU16 for Status { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Status::None), + 1 => ::core::result::Result::Ok(Status::Free), + 2 => ::core::result::Result::Ok(Status::Occupied), + 3 => ::core::result::Result::Ok(Status::Unavailable), + 4 => ::core::result::Result::Ok(Status::Oncoming), + 5 => ::core::result::Result::Ok(Status::Answering), + 6 => ::core::result::Result::Ok(Status::Off), + 7 => ::core::result::Result::Ok(Status::Other), + 8 => ::core::result::Result::Ok(Status::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Status { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Status { + #[inline] + fn type_id() -> u64 { 0xdfcd_d802_2870_ed2au64 } + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Device { + None = 0, + Phone = 1, + Tablet = 2, + Taximeter = 3, + Otherdevice = 4, + Other = 5, + Unknown = 6, + } + impl ::capnp::traits::FromU16 for Device { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Device::None), + 1 => ::core::result::Result::Ok(Device::Phone), + 2 => ::core::result::Result::Ok(Device::Tablet), + 3 => ::core::result::Result::Ok(Device::Taximeter), + 4 => ::core::result::Result::Ok(Device::Otherdevice), + 5 => ::core::result::Result::Ok(Device::Other), + 6 => ::core::result::Result::Ok(Device::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Device { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Device { + #[inline] + fn type_id() -> u64 { 0xb887_775e_896c_c6b4u64 } + } +} diff --git a/services/json2capnp/src/capnp/odTripCollection_capnp.rs b/services/json2capnp/src/capnp/odTripCollection_capnp.rs new file mode 100644 index 000000000..7e1af30da --- /dev/null +++ b/services/json2capnp/src/capnp/odTripCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: odTripCollection.capnp + + +pub mod od_trip_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_od_trips(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::odTrip_capnp::od_trip::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_od_trips(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_od_trips(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::odTrip_capnp::od_trip::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_od_trips(&mut self, value: ::capnp::struct_list::Reader<'a,crate::odTrip_capnp::od_trip::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_od_trips(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::odTrip_capnp::od_trip::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_od_trips(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xe1b7_6be1_26da_4a62; + } +} diff --git a/services/json2capnp/src/capnp/odTrip_capnp.rs b/services/json2capnp/src/capnp/odTrip_capnp.rs new file mode 100644 index 000000000..2f136754e --- /dev/null +++ b/services/json2capnp/src/capnp/odTrip_capnp.rs @@ -0,0 +1,683 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: odTrip.capnp + + +pub mod od_trip { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_person_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_person_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_household_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_household_uuid(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_expansion_factor(self) -> f32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_departure_time_seconds(self) -> i32 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_arrival_time_seconds(self) -> i32 { + self.reader.get_data_field::(3) + } + #[inline] + pub fn get_walking_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_cycling_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_driving_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(6) + } + #[inline] + pub fn get_mode(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(14)) + } + #[inline] + pub fn get_origin_activity(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(15)) + } + #[inline] + pub fn get_destination_activity(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(16)) + } + #[inline] + pub fn get_origin_latitude(self) -> i32 { + self.reader.get_data_field::(9) + } + #[inline] + pub fn get_origin_longitude(self) -> i32 { + self.reader.get_data_field::(10) + } + #[inline] + pub fn get_destination_latitude(self) -> i32 { + self.reader.get_data_field::(11) + } + #[inline] + pub fn get_destination_longitude(self) -> i32 { + self.reader.get_data_field::(12) + } + #[inline] + pub fn get_origin_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_origin_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_origin_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_origin_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_origin_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_origin_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_destination_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_destination_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_destination_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_destination_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_destination_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_destination_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(11), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(11).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(34) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_person_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_person_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_person_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_person_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_household_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_household_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_household_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_household_uuid(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_data_source_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_data_source_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_expansion_factor(self) -> f32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_expansion_factor(&mut self, value: f32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_departure_time_seconds(self) -> i32 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_departure_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_arrival_time_seconds(self) -> i32 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_arrival_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(3, value); + } + #[inline] + pub fn get_walking_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_walking_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_cycling_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_cycling_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_driving_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(6) + } + #[inline] + pub fn set_driving_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(6, value); + } + #[inline] + pub fn get_mode(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(14)) + } + #[inline] + pub fn set_mode(&mut self, value: crate::odTrip_capnp::od_trip::Mode) { + self.builder.set_data_field::(14, value as u16) + } + #[inline] + pub fn get_origin_activity(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(15)) + } + #[inline] + pub fn set_origin_activity(&mut self, value: crate::odTrip_capnp::od_trip::Activity) { + self.builder.set_data_field::(15, value as u16) + } + #[inline] + pub fn get_destination_activity(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(16)) + } + #[inline] + pub fn set_destination_activity(&mut self, value: crate::odTrip_capnp::od_trip::Activity) { + self.builder.set_data_field::(16, value as u16) + } + #[inline] + pub fn get_origin_latitude(self) -> i32 { + self.builder.get_data_field::(9) + } + #[inline] + pub fn set_origin_latitude(&mut self, value: i32) { + self.builder.set_data_field::(9, value); + } + #[inline] + pub fn get_origin_longitude(self) -> i32 { + self.builder.get_data_field::(10) + } + #[inline] + pub fn set_origin_longitude(&mut self, value: i32) { + self.builder.set_data_field::(10, value); + } + #[inline] + pub fn get_destination_latitude(self) -> i32 { + self.builder.get_data_field::(11) + } + #[inline] + pub fn set_destination_latitude(&mut self, value: i32) { + self.builder.set_data_field::(11, value); + } + #[inline] + pub fn get_destination_longitude(self) -> i32 { + self.builder.get_data_field::(12) + } + #[inline] + pub fn set_destination_longitude(&mut self, value: i32) { + self.builder.set_data_field::(12, value); + } + #[inline] + pub fn get_origin_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_origin_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(4), value, false) + } + #[inline] + pub fn init_origin_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(4), size) + } + pub fn has_origin_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_origin_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_origin_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(5), value, false) + } + #[inline] + pub fn init_origin_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(5), size) + } + pub fn has_origin_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_origin_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_origin_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(6), value, false) + } + #[inline] + pub fn init_origin_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(6), size) + } + pub fn has_origin_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_destination_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_destination_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(7), value, false) + } + #[inline] + pub fn init_destination_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(7), size) + } + pub fn has_destination_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_destination_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_destination_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(8), value, false) + } + #[inline] + pub fn init_destination_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(8), size) + } + pub fn has_destination_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_destination_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_destination_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(9), value, false) + } + #[inline] + pub fn init_destination_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(9), size) + } + pub fn has_destination_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(10).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(10).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(11), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(11).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(11).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(11).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(34) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(34, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 7, pointers: 12 }; + pub const TYPE_ID: u64 = 0xf97d_02eb_36e1_c023; + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Mode { + None = 0, + Walking = 1, + Cycling = 2, + CarDriver = 3, + CarPassenger = 4, + Motorcycle = 5, + Transit = 6, + Paratransit = 7, + Taxi = 8, + SchoolBus = 9, + OtherBus = 10, + IntercityBus = 11, + IntercityTrain = 12, + Plane = 13, + Ferry = 14, + ParkAndRide = 15, + KissAndRide = 16, + BikeAndRide = 17, + MultimodalOther = 18, + Other = 19, + Unknown = 20, + } + impl ::capnp::traits::FromU16 for Mode { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Mode::None), + 1 => ::core::result::Result::Ok(Mode::Walking), + 2 => ::core::result::Result::Ok(Mode::Cycling), + 3 => ::core::result::Result::Ok(Mode::CarDriver), + 4 => ::core::result::Result::Ok(Mode::CarPassenger), + 5 => ::core::result::Result::Ok(Mode::Motorcycle), + 6 => ::core::result::Result::Ok(Mode::Transit), + 7 => ::core::result::Result::Ok(Mode::Paratransit), + 8 => ::core::result::Result::Ok(Mode::Taxi), + 9 => ::core::result::Result::Ok(Mode::SchoolBus), + 10 => ::core::result::Result::Ok(Mode::OtherBus), + 11 => ::core::result::Result::Ok(Mode::IntercityBus), + 12 => ::core::result::Result::Ok(Mode::IntercityTrain), + 13 => ::core::result::Result::Ok(Mode::Plane), + 14 => ::core::result::Result::Ok(Mode::Ferry), + 15 => ::core::result::Result::Ok(Mode::ParkAndRide), + 16 => ::core::result::Result::Ok(Mode::KissAndRide), + 17 => ::core::result::Result::Ok(Mode::BikeAndRide), + 18 => ::core::result::Result::Ok(Mode::MultimodalOther), + 19 => ::core::result::Result::Ok(Mode::Other), + 20 => ::core::result::Result::Ok(Mode::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Mode { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Mode { + #[inline] + fn type_id() -> u64 { 0xcd7b_3672_405d_b997u64 } + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Activity { + None = 0, + Home = 1, + WorkUsual = 2, + WorkNonUsual = 3, + SchoolUsual = 4, + SchoolNonUsual = 5, + Shopping = 6, + Leisure = 7, + Service = 8, + SecondaryHome = 9, + VisitingFriends = 10, + DropSomeone = 11, + FetchSomeone = 12, + Restaurant = 13, + Medical = 14, + Worship = 15, + OnTheRoad = 16, + Other = 17, + Unknown = 18, + } + impl ::capnp::traits::FromU16 for Activity { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Activity::None), + 1 => ::core::result::Result::Ok(Activity::Home), + 2 => ::core::result::Result::Ok(Activity::WorkUsual), + 3 => ::core::result::Result::Ok(Activity::WorkNonUsual), + 4 => ::core::result::Result::Ok(Activity::SchoolUsual), + 5 => ::core::result::Result::Ok(Activity::SchoolNonUsual), + 6 => ::core::result::Result::Ok(Activity::Shopping), + 7 => ::core::result::Result::Ok(Activity::Leisure), + 8 => ::core::result::Result::Ok(Activity::Service), + 9 => ::core::result::Result::Ok(Activity::SecondaryHome), + 10 => ::core::result::Result::Ok(Activity::VisitingFriends), + 11 => ::core::result::Result::Ok(Activity::DropSomeone), + 12 => ::core::result::Result::Ok(Activity::FetchSomeone), + 13 => ::core::result::Result::Ok(Activity::Restaurant), + 14 => ::core::result::Result::Ok(Activity::Medical), + 15 => ::core::result::Result::Ok(Activity::Worship), + 16 => ::core::result::Result::Ok(Activity::OnTheRoad), + 17 => ::core::result::Result::Ok(Activity::Other), + 18 => ::core::result::Result::Ok(Activity::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Activity { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Activity { + #[inline] + fn type_id() -> u64 { 0xc08b_3cc8_370e_2b85u64 } + } +} diff --git a/services/json2capnp/src/capnp/pathCollection_capnp.rs b/services/json2capnp/src/capnp/pathCollection_capnp.rs new file mode 100644 index 000000000..4045b6eb2 --- /dev/null +++ b/services/json2capnp/src/capnp/pathCollection_capnp.rs @@ -0,0 +1,530 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: pathCollection.capnp + + +pub mod path { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> i32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_direction(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_direction(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_line_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_line_uuid(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_stops_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_stops_uuids(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_segments(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i32>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_segments(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_geography(self) -> ::capnp::Result<::capnp::data::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_geography(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(5) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> i32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: i32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_direction(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_direction(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_direction(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_direction(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_line_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_line_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_line_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_line_uuid(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(7), value, false) + } + #[inline] + pub fn init_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(7), size) + } + pub fn has_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_stops_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_stops_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(8), value, false) + } + #[inline] + pub fn init_stops_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(8), size) + } + pub fn has_stops_uuids(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_segments(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i32>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_segments(&mut self, value: ::capnp::primitive_list::Reader<'a,i32>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(9), value, false) + } + #[inline] + pub fn init_segments(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i32> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(9), size) + } + pub fn has_segments(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_geography(self) -> ::capnp::Result<::capnp::data::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_geography(&mut self, value: ::capnp::data::Reader<'_>) { + self.builder.get_pointer_field(10).set_data(value); + } + #[inline] + pub fn init_geography(self, size: u32) -> ::capnp::data::Builder<'a> { + self.builder.get_pointer_field(10).init_data(size) + } + pub fn has_geography(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(5, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 11 }; + pub const TYPE_ID: u64 = 0xddce_17c4_e19d_4594; + } +} + +pub mod path_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_paths(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::pathCollection_capnp::path::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_paths(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_paths(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::pathCollection_capnp::path::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_paths(&mut self, value: ::capnp::struct_list::Reader<'a,crate::pathCollection_capnp::path::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_paths(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::pathCollection_capnp::path::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_paths(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xb620_80e1_6309_c958; + } +} diff --git a/services/json2capnp/src/capnp/personCollection_capnp.rs b/services/json2capnp/src/capnp/personCollection_capnp.rs new file mode 100644 index 000000000..99c89a706 --- /dev/null +++ b/services/json2capnp/src/capnp/personCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: personCollection.capnp + + +pub mod person_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_persons(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::person_capnp::person::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_persons(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_persons(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::person_capnp::person::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_persons(&mut self, value: ::capnp::struct_list::Reader<'a,crate::person_capnp::person::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_persons(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::person_capnp::person::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_persons(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xd974_bc28_3632_0626; + } +} diff --git a/services/json2capnp/src/capnp/person_capnp.rs b/services/json2capnp/src/capnp/person_capnp.rs new file mode 100644 index 000000000..d15ccc4a3 --- /dev/null +++ b/services/json2capnp/src/capnp/person_capnp.rs @@ -0,0 +1,726 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: person.capnp + + +pub mod person { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_household_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_household_uuid(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_expansion_factor(self) -> f32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_age(self) -> i16 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_driving_license_owner(self) -> i8 { + self.reader.get_data_field::(10) + } + #[inline] + pub fn get_transit_pass_owner(self) -> i8 { + self.reader.get_data_field::(11) + } + #[inline] + pub fn get_age_group(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(6)) + } + #[inline] + pub fn get_gender(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(7)) + } + #[inline] + pub fn get_occupation(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.reader.get_data_field::(8)) + } + #[inline] + pub fn get_usual_work_place_latitude(self) -> i32 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_usual_work_place_longitude(self) -> i32 { + self.reader.get_data_field::(6) + } + #[inline] + pub fn get_usual_school_place_latitude(self) -> i32 { + self.reader.get_data_field::(7) + } + #[inline] + pub fn get_usual_school_place_longitude(self) -> i32 { + self.reader.get_data_field::(8) + } + #[inline] + pub fn get_usual_work_place_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_usual_work_place_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_usual_work_place_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_usual_work_place_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_usual_work_place_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_usual_work_place_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_usual_school_place_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_usual_school_place_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_usual_school_place_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_usual_school_place_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_usual_school_place_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_usual_school_place_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(18) + } + #[inline] + pub fn get_usual_work_place_walking_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(9) + } + #[inline] + pub fn get_usual_work_place_cycling_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(10) + } + #[inline] + pub fn get_usual_work_place_driving_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(11) + } + #[inline] + pub fn get_usual_school_place_walking_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(12) + } + #[inline] + pub fn get_usual_school_place_cycling_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(13) + } + #[inline] + pub fn get_usual_school_place_driving_travel_time_seconds(self) -> i32 { + self.reader.get_data_field::(14) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_data_source_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_data_source_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_household_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_household_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_household_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_household_uuid(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_expansion_factor(self) -> f32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_expansion_factor(&mut self, value: f32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_age(self) -> i16 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_age(&mut self, value: i16) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_driving_license_owner(self) -> i8 { + self.builder.get_data_field::(10) + } + #[inline] + pub fn set_driving_license_owner(&mut self, value: i8) { + self.builder.set_data_field::(10, value); + } + #[inline] + pub fn get_transit_pass_owner(self) -> i8 { + self.builder.get_data_field::(11) + } + #[inline] + pub fn set_transit_pass_owner(&mut self, value: i8) { + self.builder.set_data_field::(11, value); + } + #[inline] + pub fn get_age_group(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(6)) + } + #[inline] + pub fn set_age_group(&mut self, value: crate::person_capnp::person::AgeGroup) { + self.builder.set_data_field::(6, value as u16) + } + #[inline] + pub fn get_gender(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(7)) + } + #[inline] + pub fn set_gender(&mut self, value: crate::person_capnp::person::Gender) { + self.builder.set_data_field::(7, value as u16) + } + #[inline] + pub fn get_occupation(self) -> ::core::result::Result { + ::capnp::traits::FromU16::from_u16(self.builder.get_data_field::(8)) + } + #[inline] + pub fn set_occupation(&mut self, value: crate::person_capnp::person::Occupation) { + self.builder.set_data_field::(8, value as u16) + } + #[inline] + pub fn get_usual_work_place_latitude(self) -> i32 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_usual_work_place_latitude(&mut self, value: i32) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_usual_work_place_longitude(self) -> i32 { + self.builder.get_data_field::(6) + } + #[inline] + pub fn set_usual_work_place_longitude(&mut self, value: i32) { + self.builder.set_data_field::(6, value); + } + #[inline] + pub fn get_usual_school_place_latitude(self) -> i32 { + self.builder.get_data_field::(7) + } + #[inline] + pub fn set_usual_school_place_latitude(&mut self, value: i32) { + self.builder.set_data_field::(7, value); + } + #[inline] + pub fn get_usual_school_place_longitude(self) -> i32 { + self.builder.get_data_field::(8) + } + #[inline] + pub fn set_usual_school_place_longitude(&mut self, value: i32) { + self.builder.set_data_field::(8, value); + } + #[inline] + pub fn get_usual_work_place_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_usual_work_place_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(3), value, false) + } + #[inline] + pub fn init_usual_work_place_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(3), size) + } + pub fn has_usual_work_place_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_usual_work_place_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_usual_work_place_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(4), value, false) + } + #[inline] + pub fn init_usual_work_place_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(4), size) + } + pub fn has_usual_work_place_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_usual_work_place_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_usual_work_place_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(5), value, false) + } + #[inline] + pub fn init_usual_work_place_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(5), size) + } + pub fn has_usual_work_place_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_usual_school_place_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_usual_school_place_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(6), value, false) + } + #[inline] + pub fn init_usual_school_place_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(6), size) + } + pub fn has_usual_school_place_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_usual_school_place_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_usual_school_place_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(7), value, false) + } + #[inline] + pub fn init_usual_school_place_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(7), size) + } + pub fn has_usual_school_place_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_usual_school_place_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_usual_school_place_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(8), value, false) + } + #[inline] + pub fn init_usual_school_place_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(8), size) + } + pub fn has_usual_school_place_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(9).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(9).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(10).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(10).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(18) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(18, value); + } + #[inline] + pub fn get_usual_work_place_walking_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(9) + } + #[inline] + pub fn set_usual_work_place_walking_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(9, value); + } + #[inline] + pub fn get_usual_work_place_cycling_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(10) + } + #[inline] + pub fn set_usual_work_place_cycling_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(10, value); + } + #[inline] + pub fn get_usual_work_place_driving_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(11) + } + #[inline] + pub fn set_usual_work_place_driving_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(11, value); + } + #[inline] + pub fn get_usual_school_place_walking_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(12) + } + #[inline] + pub fn set_usual_school_place_walking_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(12, value); + } + #[inline] + pub fn get_usual_school_place_cycling_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(13) + } + #[inline] + pub fn set_usual_school_place_cycling_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(13, value); + } + #[inline] + pub fn get_usual_school_place_driving_travel_time_seconds(self) -> i32 { + self.builder.get_data_field::(14) + } + #[inline] + pub fn set_usual_school_place_driving_travel_time_seconds(&mut self, value: i32) { + self.builder.set_data_field::(14, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 8, pointers: 11 }; + pub const TYPE_ID: u64 = 0xe900_aec8_5ed9_b47f; + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum AgeGroup { + None = 0, + Ag0004 = 1, + Ag0509 = 2, + Ag1014 = 3, + Ag1519 = 4, + Ag2024 = 5, + Ag2529 = 6, + Ag3034 = 7, + Ag3539 = 8, + Ag4044 = 9, + Ag4549 = 10, + Ag5054 = 11, + Ag5559 = 12, + Ag6064 = 13, + Ag6569 = 14, + Ag7074 = 15, + Ag7579 = 16, + Ag8084 = 17, + Ag8589 = 18, + Ag9094 = 19, + Ag95plus = 20, + Unknown = 21, + } + impl ::capnp::traits::FromU16 for AgeGroup { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(AgeGroup::None), + 1 => ::core::result::Result::Ok(AgeGroup::Ag0004), + 2 => ::core::result::Result::Ok(AgeGroup::Ag0509), + 3 => ::core::result::Result::Ok(AgeGroup::Ag1014), + 4 => ::core::result::Result::Ok(AgeGroup::Ag1519), + 5 => ::core::result::Result::Ok(AgeGroup::Ag2024), + 6 => ::core::result::Result::Ok(AgeGroup::Ag2529), + 7 => ::core::result::Result::Ok(AgeGroup::Ag3034), + 8 => ::core::result::Result::Ok(AgeGroup::Ag3539), + 9 => ::core::result::Result::Ok(AgeGroup::Ag4044), + 10 => ::core::result::Result::Ok(AgeGroup::Ag4549), + 11 => ::core::result::Result::Ok(AgeGroup::Ag5054), + 12 => ::core::result::Result::Ok(AgeGroup::Ag5559), + 13 => ::core::result::Result::Ok(AgeGroup::Ag6064), + 14 => ::core::result::Result::Ok(AgeGroup::Ag6569), + 15 => ::core::result::Result::Ok(AgeGroup::Ag7074), + 16 => ::core::result::Result::Ok(AgeGroup::Ag7579), + 17 => ::core::result::Result::Ok(AgeGroup::Ag8084), + 18 => ::core::result::Result::Ok(AgeGroup::Ag8589), + 19 => ::core::result::Result::Ok(AgeGroup::Ag9094), + 20 => ::core::result::Result::Ok(AgeGroup::Ag95plus), + 21 => ::core::result::Result::Ok(AgeGroup::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for AgeGroup { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for AgeGroup { + #[inline] + fn type_id() -> u64 { 0xf694_a97e_7333_2360u64 } + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Gender { + None = 0, + Female = 1, + Male = 2, + Custom = 3, + Unknown = 4, + } + impl ::capnp::traits::FromU16 for Gender { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Gender::None), + 1 => ::core::result::Result::Ok(Gender::Female), + 2 => ::core::result::Result::Ok(Gender::Male), + 3 => ::core::result::Result::Ok(Gender::Custom), + 4 => ::core::result::Result::Ok(Gender::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Gender { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Gender { + #[inline] + fn type_id() -> u64 { 0xa79f_42e7_2d34_38ebu64 } + } + + #[repr(u16)] + #[derive(Clone, Copy, PartialEq)] + pub enum Occupation { + None = 0, + FullTimeWorker = 1, + PartTimeWorker = 2, + FullTimeStudent = 3, + PartTimeStudent = 4, + WorkerAndStudent = 5, + Retired = 6, + AtHome = 7, + Other = 8, + NonApplicable = 9, + Unknown = 10, + } + impl ::capnp::traits::FromU16 for Occupation { + #[inline] + fn from_u16(value: u16) -> ::core::result::Result { + match value { + 0 => ::core::result::Result::Ok(Occupation::None), + 1 => ::core::result::Result::Ok(Occupation::FullTimeWorker), + 2 => ::core::result::Result::Ok(Occupation::PartTimeWorker), + 3 => ::core::result::Result::Ok(Occupation::FullTimeStudent), + 4 => ::core::result::Result::Ok(Occupation::PartTimeStudent), + 5 => ::core::result::Result::Ok(Occupation::WorkerAndStudent), + 6 => ::core::result::Result::Ok(Occupation::Retired), + 7 => ::core::result::Result::Ok(Occupation::AtHome), + 8 => ::core::result::Result::Ok(Occupation::Other), + 9 => ::core::result::Result::Ok(Occupation::NonApplicable), + 10 => ::core::result::Result::Ok(Occupation::Unknown), + n => ::core::result::Result::Err(::capnp::NotInSchema(n)), + } + } + } + impl ::capnp::traits::ToU16 for Occupation { + #[inline] + fn to_u16(self) -> u16 { self as u16 } + } + impl ::capnp::traits::HasTypeId for Occupation { + #[inline] + fn type_id() -> u64 { 0x82dd_95ea_ca05_1112u64 } + } +} diff --git a/services/json2capnp/src/capnp/placeCollection_capnp.rs b/services/json2capnp/src/capnp/placeCollection_capnp.rs new file mode 100644 index 000000000..cde2b0772 --- /dev/null +++ b/services/json2capnp/src/capnp/placeCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: placeCollection.capnp + + +pub mod place_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_places(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::place_capnp::place::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_places(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_places(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::place_capnp::place::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_places(&mut self, value: ::capnp::struct_list::Reader<'a,crate::place_capnp::place::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_places(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::place_capnp::place::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_places(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xd409_cc26_7e3d_980f; + } +} diff --git a/services/json2capnp/src/capnp/place_capnp.rs b/services/json2capnp/src/capnp/place_capnp.rs new file mode 100644 index 000000000..6f4e333b1 --- /dev/null +++ b/services/json2capnp/src/capnp/place_capnp.rs @@ -0,0 +1,385 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: place.capnp + + +pub mod place { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_shortname(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_nodes_travel_times(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Reader<'a,i16>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_nodes_distances(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(12) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_data_source_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_data_source_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_id(self) -> u32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: u32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_shortname(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_latitude(self) -> i32 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_latitude(&mut self, value: i32) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_longitude(self) -> i32 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_longitude(&mut self, value: i32) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(5), value, false) + } + #[inline] + pub fn init_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(5), size) + } + pub fn has_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_nodes_travel_times(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes_travel_times(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(6), value, false) + } + #[inline] + pub fn init_nodes_travel_times(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(6), size) + } + pub fn has_nodes_travel_times(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_nodes_distances(self) -> ::capnp::Result<::capnp::primitive_list::Builder<'a,i16>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_nodes_distances(&mut self, value: ::capnp::primitive_list::Reader<'a,i16>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(7), value, false) + } + #[inline] + pub fn init_nodes_distances(self, size: u32) -> ::capnp::primitive_list::Builder<'a,i16> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(7), size) + } + pub fn has_nodes_distances(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(8).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(8).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(9).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(9).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(12) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(12, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 2, pointers: 10 }; + pub const TYPE_ID: u64 = 0xdce3_876c_3329_abbe; + } +} diff --git a/services/json2capnp/src/capnp/scenarioCollection_capnp.rs b/services/json2capnp/src/capnp/scenarioCollection_capnp.rs new file mode 100644 index 000000000..814018076 --- /dev/null +++ b/services/json2capnp/src/capnp/scenarioCollection_capnp.rs @@ -0,0 +1,606 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: scenarioCollection.capnp + + +pub mod scenario { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_services_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_services_uuids(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_only_lines_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_only_lines_uuids(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_except_lines_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_except_lines_uuids(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_only_agencies_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_only_agencies_uuids(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_except_agencies_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_except_agencies_uuids(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_only_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_only_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_except_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(11), ::core::option::Option::None) + } + pub fn has_except_nodes_uuids(&self) -> bool { + !self.reader.get_pointer_field(11).is_null() + } + #[inline] + pub fn get_only_modes_shortnames(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(12), ::core::option::Option::None) + } + pub fn has_only_modes_shortnames(&self) -> bool { + !self.reader.get_pointer_field(12).is_null() + } + #[inline] + pub fn get_except_modes_shortnames(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(13), ::core::option::Option::None) + } + pub fn has_except_modes_shortnames(&self) -> bool { + !self.reader.get_pointer_field(13).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_simulation_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(14), ::core::option::Option::None) + } + pub fn has_simulation_uuid(&self) -> bool { + !self.reader.get_pointer_field(14).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_services_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_services_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(5), value, false) + } + #[inline] + pub fn init_services_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(5), size) + } + pub fn has_services_uuids(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_only_lines_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_only_lines_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(6), value, false) + } + #[inline] + pub fn init_only_lines_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(6), size) + } + pub fn has_only_lines_uuids(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_except_lines_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_except_lines_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(7), value, false) + } + #[inline] + pub fn init_except_lines_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(7), size) + } + pub fn has_except_lines_uuids(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_only_agencies_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_only_agencies_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(8), value, false) + } + #[inline] + pub fn init_only_agencies_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(8), size) + } + pub fn has_only_agencies_uuids(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_except_agencies_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_except_agencies_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(9), value, false) + } + #[inline] + pub fn init_except_agencies_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(9), size) + } + pub fn has_except_agencies_uuids(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_only_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_only_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(10), value, false) + } + #[inline] + pub fn init_only_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(10), size) + } + pub fn has_only_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_except_nodes_uuids(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(11), ::core::option::Option::None) + } + #[inline] + pub fn set_except_nodes_uuids(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(11), value, false) + } + #[inline] + pub fn init_except_nodes_uuids(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(11), size) + } + pub fn has_except_nodes_uuids(&self) -> bool { + !self.builder.get_pointer_field(11).is_null() + } + #[inline] + pub fn get_only_modes_shortnames(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(12), ::core::option::Option::None) + } + #[inline] + pub fn set_only_modes_shortnames(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(12), value, false) + } + #[inline] + pub fn init_only_modes_shortnames(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(12), size) + } + pub fn has_only_modes_shortnames(&self) -> bool { + !self.builder.get_pointer_field(12).is_null() + } + #[inline] + pub fn get_except_modes_shortnames(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(13), ::core::option::Option::None) + } + #[inline] + pub fn set_except_modes_shortnames(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(13), value, false) + } + #[inline] + pub fn init_except_modes_shortnames(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(13), size) + } + pub fn has_except_modes_shortnames(&self) -> bool { + !self.builder.get_pointer_field(13).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_simulation_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(14), ::core::option::Option::None) + } + #[inline] + pub fn set_simulation_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(14).set_text(value); + } + #[inline] + pub fn init_simulation_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(14).init_text(size) + } + pub fn has_simulation_uuid(&self) -> bool { + !self.builder.get_pointer_field(14).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 15 }; + pub const TYPE_ID: u64 = 0xd02b_fb3e_8aaf_660b; + } +} + +pub mod scenario_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_scenarios(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::scenarioCollection_capnp::scenario::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_scenarios(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_scenarios(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::scenarioCollection_capnp::scenario::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_scenarios(&mut self, value: ::capnp::struct_list::Reader<'a,crate::scenarioCollection_capnp::scenario::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_scenarios(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::scenarioCollection_capnp::scenario::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_scenarios(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xfb48_4a8c_ffc8_2db3; + } +} diff --git a/services/json2capnp/src/capnp/serviceCollection_capnp.rs b/services/json2capnp/src/capnp/serviceCollection_capnp.rs new file mode 100644 index 000000000..6bc2db1da --- /dev/null +++ b/services/json2capnp/src/capnp/serviceCollection_capnp.rs @@ -0,0 +1,602 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: serviceCollection.capnp + + +pub mod service { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_monday(self) -> i8 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_tuesday(self) -> i8 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_wednesday(self) -> i8 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_thursday(self) -> i8 { + self.reader.get_data_field::(3) + } + #[inline] + pub fn get_friday(self) -> i8 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_saturday(self) -> i8 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_sunday(self) -> i8 { + self.reader.get_data_field::(6) + } + #[inline] + pub fn get_start_date(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_start_date(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_end_date(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_end_date(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_only_dates(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_only_dates(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_except_dates(self) -> ::capnp::Result<::capnp::text_list::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_except_dates(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(7) + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(8) + } + #[inline] + pub fn get_simulation_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_simulation_uuid(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_monday(self) -> i8 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_monday(&mut self, value: i8) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_tuesday(self) -> i8 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_tuesday(&mut self, value: i8) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_wednesday(self) -> i8 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_wednesday(&mut self, value: i8) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_thursday(self) -> i8 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_thursday(&mut self, value: i8) { + self.builder.set_data_field::(3, value); + } + #[inline] + pub fn get_friday(self) -> i8 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_friday(&mut self, value: i8) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_saturday(self) -> i8 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_saturday(&mut self, value: i8) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_sunday(self) -> i8 { + self.builder.get_data_field::(6) + } + #[inline] + pub fn set_sunday(&mut self, value: i8) { + self.builder.set_data_field::(6, value); + } + #[inline] + pub fn get_start_date(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_start_date(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_start_date(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_start_date(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_end_date(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_end_date(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_end_date(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_end_date(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_only_dates(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_only_dates(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(5), value, false) + } + #[inline] + pub fn init_only_dates(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(5), size) + } + pub fn has_only_dates(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_except_dates(self) -> ::capnp::Result<::capnp::text_list::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_except_dates(&mut self, value: ::capnp::text_list::Reader<'a>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(6), value, false) + } + #[inline] + pub fn init_except_dates(self, size: u32) -> ::capnp::text_list::Builder<'a> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(6), size) + } + pub fn has_except_dates(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(7) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(7, value); + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(8).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(8).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(9).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(9).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(8) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(8, value); + } + #[inline] + pub fn get_simulation_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_simulation_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(10).set_text(value); + } + #[inline] + pub fn init_simulation_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(10).init_text(size) + } + pub fn has_simulation_uuid(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 2, pointers: 11 }; + pub const TYPE_ID: u64 = 0xb43b_93e1_c1ad_0616; + } +} + +pub mod service_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_services(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::serviceCollection_capnp::service::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_services(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_services(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::serviceCollection_capnp::service::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_services(&mut self, value: ::capnp::struct_list::Reader<'a,crate::serviceCollection_capnp::service::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_services(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::serviceCollection_capnp::service::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_services(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xbf2e_2f3d_4b67_2cfc; + } +} diff --git a/services/json2capnp/src/capnp/unitCollection_capnp.rs b/services/json2capnp/src/capnp/unitCollection_capnp.rs new file mode 100644 index 000000000..2b4cbeaf4 --- /dev/null +++ b/services/json2capnp/src/capnp/unitCollection_capnp.rs @@ -0,0 +1,636 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: unitCollection.capnp + + +pub mod unit { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_agency_uuid(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_garage_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_garage_uuid(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_line_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_line_uuid(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_mode(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_mode(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_manufacturer(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_manufacturer(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_model(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_model(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_capacity_seated(self) -> i16 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_capacity_standing(self) -> i16 { + self.reader.get_data_field::(1) + } + #[inline] + pub fn get_number_of_vehicles(self) -> i16 { + self.reader.get_data_field::(2) + } + #[inline] + pub fn get_number_of_doors(self) -> i16 { + self.reader.get_data_field::(3) + } + #[inline] + pub fn get_number_of_door_channels(self) -> i16 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_license_number(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_license_number(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_serial_number(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(9), ::core::option::Option::None) + } + pub fn has_serial_number(&self) -> bool { + !self.reader.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_length_mm(self) -> f32 { + self.reader.get_data_field::(3) + } + #[inline] + pub fn get_width_mm(self) -> f32 { + self.reader.get_data_field::(4) + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(10), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.reader.get_data_field::(10) + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(11) + } + #[inline] + pub fn get_id(self) -> i32 { + self.reader.get_data_field::(5) + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(11), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(11).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_agency_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_agency_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_agency_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_agency_uuid(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_garage_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_garage_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_garage_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_garage_uuid(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_line_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_line_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_line_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_line_uuid(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_mode(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_mode(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_mode(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_mode(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_manufacturer(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_manufacturer(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(6).set_text(value); + } + #[inline] + pub fn init_manufacturer(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(6).init_text(size) + } + pub fn has_manufacturer(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_model(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_model(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_model(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_model(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_capacity_seated(self) -> i16 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_capacity_seated(&mut self, value: i16) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_capacity_standing(self) -> i16 { + self.builder.get_data_field::(1) + } + #[inline] + pub fn set_capacity_standing(&mut self, value: i16) { + self.builder.set_data_field::(1, value); + } + #[inline] + pub fn get_number_of_vehicles(self) -> i16 { + self.builder.get_data_field::(2) + } + #[inline] + pub fn set_number_of_vehicles(&mut self, value: i16) { + self.builder.set_data_field::(2, value); + } + #[inline] + pub fn get_number_of_doors(self) -> i16 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_number_of_doors(&mut self, value: i16) { + self.builder.set_data_field::(3, value); + } + #[inline] + pub fn get_number_of_door_channels(self) -> i16 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_number_of_door_channels(&mut self, value: i16) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_license_number(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_license_number(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(8).set_text(value); + } + #[inline] + pub fn init_license_number(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(8).init_text(size) + } + pub fn has_license_number(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_serial_number(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(9), ::core::option::Option::None) + } + #[inline] + pub fn set_serial_number(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(9).set_text(value); + } + #[inline] + pub fn init_serial_number(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(9).init_text(size) + } + pub fn has_serial_number(&self) -> bool { + !self.builder.get_pointer_field(9).is_null() + } + #[inline] + pub fn get_length_mm(self) -> f32 { + self.builder.get_data_field::(3) + } + #[inline] + pub fn set_length_mm(&mut self, value: f32) { + self.builder.set_data_field::(3, value); + } + #[inline] + pub fn get_width_mm(self) -> f32 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_width_mm(&mut self, value: f32) { + self.builder.set_data_field::(4, value); + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(10), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(10).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(10).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(10).is_null() + } + #[inline] + pub fn get_is_enabled(self) -> i8 { + self.builder.get_data_field::(10) + } + #[inline] + pub fn set_is_enabled(&mut self, value: i8) { + self.builder.set_data_field::(10, value); + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(11) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(11, value); + } + #[inline] + pub fn get_id(self) -> i32 { + self.builder.get_data_field::(5) + } + #[inline] + pub fn set_id(&mut self, value: i32) { + self.builder.set_data_field::(5, value); + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(11), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(11).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(11).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(11).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 3, pointers: 12 }; + pub const TYPE_ID: u64 = 0xbba1_dcf4_892e_cc7d; + } +} + +pub mod unit_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_units(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::unitCollection_capnp::unit::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_units(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_units(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::unitCollection_capnp::unit::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_units(&mut self, value: ::capnp::struct_list::Reader<'a,crate::unitCollection_capnp::unit::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_units(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::unitCollection_capnp::unit::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_units(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xb619_2eb1_54ec_b4d0; + } +} diff --git a/services/json2capnp/src/capnp/zoneCollection_capnp.rs b/services/json2capnp/src/capnp/zoneCollection_capnp.rs new file mode 100644 index 000000000..31fbeb85c --- /dev/null +++ b/services/json2capnp/src/capnp/zoneCollection_capnp.rs @@ -0,0 +1,139 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: zoneCollection.capnp + + +pub mod zone_collection { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_zones(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::zone_capnp::zone::Owned>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_zones(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_zones(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::zone_capnp::zone::Owned>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_zones(&mut self, value: ::capnp::struct_list::Reader<'a,crate::zone_capnp::zone::Owned>) -> ::capnp::Result<()> { + ::capnp::traits::SetPointerBuilder::set_pointer_builder(self.builder.get_pointer_field(0), value, false) + } + #[inline] + pub fn init_zones(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::zone_capnp::zone::Owned> { + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) + } + pub fn has_zones(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 0, pointers: 1 }; + pub const TYPE_ID: u64 = 0xd36f_8abb_bcee_eb8a; + } +} diff --git a/services/json2capnp/src/capnp/zone_capnp.rs b/services/json2capnp/src/capnp/zone_capnp.rs new file mode 100644 index 000000000..e2dfb9f2e --- /dev/null +++ b/services/json2capnp/src/capnp/zone_capnp.rs @@ -0,0 +1,339 @@ +// @generated by the capnpc-rust plugin to the Cap'n Proto schema compiler. +// DO NOT EDIT. +// source: zone.capnp + + +pub mod zone { + #[derive(Copy, Clone)] + pub struct Owned(()); + impl <'a> ::capnp::traits::Owned<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl <'a> ::capnp::traits::OwnedStruct<'a> for Owned { type Reader = Reader<'a>; type Builder = Builder<'a>; } + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } + + #[derive(Clone, Copy)] + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } + + impl <'a,> ::capnp::traits::HasTypeId for Reader<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructReader<'a> for Reader<'a,> { + fn new(reader: ::capnp::private::layout::StructReader<'a>) -> Reader<'a,> { + Reader { reader, } + } + } + + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructReader::new(reader.get_struct(default)?)) + } + } + + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { + self.reader + } + } + + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) + } + } + + impl <'a,> Reader<'a,> { + pub fn reborrow(&self) -> Reader<'_,> { + Reader { .. *self } + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.reader.total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) + } + pub fn has_uuid(&self) -> bool { + !self.reader.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> i32 { + self.reader.get_data_field::(0) + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(1), ::core::option::Option::None) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.reader.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(2), ::core::option::Option::None) + } + pub fn has_shortname(&self) -> bool { + !self.reader.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(3), ::core::option::Option::None) + } + pub fn has_name(&self) -> bool { + !self.reader.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) + } + pub fn has_color(&self) -> bool { + !self.reader.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(5), ::core::option::Option::None) + } + pub fn has_description(&self) -> bool { + !self.reader.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_geography(self) -> ::capnp::Result<::capnp::data::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(6), ::core::option::Option::None) + } + pub fn has_geography(&self) -> bool { + !self.reader.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(7), ::core::option::Option::None) + } + pub fn has_internal_id(&self) -> bool { + !self.reader.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Reader<'a>> { + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(8), ::core::option::Option::None) + } + pub fn has_data(&self) -> bool { + !self.reader.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.reader.get_data_field::(4) + } + } + + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } + impl <'a,> ::capnp::traits::HasStructSize for Builder<'a,> { + #[inline] + fn struct_size() -> ::capnp::private::layout::StructSize { _private::STRUCT_SIZE } + } + impl <'a,> ::capnp::traits::HasTypeId for Builder<'a,> { + #[inline] + fn type_id() -> u64 { _private::TYPE_ID } + } + impl <'a,> ::capnp::traits::FromStructBuilder<'a> for Builder<'a,> { + fn new(builder: ::capnp::private::layout::StructBuilder<'a>) -> Builder<'a, > { + Builder { builder, } + } + } + + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) + } + } + + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Builder<'a,> { + ::capnp::traits::FromStructBuilder::new(builder.init_struct(_private::STRUCT_SIZE)) + } + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [capnp::Word]>) -> ::capnp::Result> { + ::core::result::Result::Ok(::capnp::traits::FromStructBuilder::new(builder.get_struct(_private::STRUCT_SIZE, default)?)) + } + } + + impl <'a,> ::capnp::traits::SetPointerBuilder for Reader<'a,> { + fn set_pointer_builder<'b>(pointer: ::capnp::private::layout::PointerBuilder<'b>, value: Reader<'a,>, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } + } + + impl <'a,> Builder<'a,> { + pub fn into_reader(self) -> Reader<'a,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + pub fn reborrow(&mut self) -> Builder<'_,> { + Builder { .. *self } + } + pub fn reborrow_as_reader(&self) -> Reader<'_,> { + ::capnp::traits::FromStructReader::new(self.builder.into_reader()) + } + + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { + self.builder.into_reader().total_size() + } + #[inline] + pub fn get_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) + } + #[inline] + pub fn set_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(0).set_text(value); + } + #[inline] + pub fn init_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(0).init_text(size) + } + pub fn has_uuid(&self) -> bool { + !self.builder.get_pointer_field(0).is_null() + } + #[inline] + pub fn get_id(self) -> i32 { + self.builder.get_data_field::(0) + } + #[inline] + pub fn set_id(&mut self, value: i32) { + self.builder.set_data_field::(0, value); + } + #[inline] + pub fn get_data_source_uuid(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(1), ::core::option::Option::None) + } + #[inline] + pub fn set_data_source_uuid(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(1).set_text(value); + } + #[inline] + pub fn init_data_source_uuid(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(1).init_text(size) + } + pub fn has_data_source_uuid(&self) -> bool { + !self.builder.get_pointer_field(1).is_null() + } + #[inline] + pub fn get_shortname(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(2), ::core::option::Option::None) + } + #[inline] + pub fn set_shortname(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(2).set_text(value); + } + #[inline] + pub fn init_shortname(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(2).init_text(size) + } + pub fn has_shortname(&self) -> bool { + !self.builder.get_pointer_field(2).is_null() + } + #[inline] + pub fn get_name(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(3), ::core::option::Option::None) + } + #[inline] + pub fn set_name(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(3).set_text(value); + } + #[inline] + pub fn init_name(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(3).init_text(size) + } + pub fn has_name(&self) -> bool { + !self.builder.get_pointer_field(3).is_null() + } + #[inline] + pub fn get_color(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) + } + #[inline] + pub fn set_color(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(4).set_text(value); + } + #[inline] + pub fn init_color(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(4).init_text(size) + } + pub fn has_color(&self) -> bool { + !self.builder.get_pointer_field(4).is_null() + } + #[inline] + pub fn get_description(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(5), ::core::option::Option::None) + } + #[inline] + pub fn set_description(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(5).set_text(value); + } + #[inline] + pub fn init_description(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(5).init_text(size) + } + pub fn has_description(&self) -> bool { + !self.builder.get_pointer_field(5).is_null() + } + #[inline] + pub fn get_geography(self) -> ::capnp::Result<::capnp::data::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(6), ::core::option::Option::None) + } + #[inline] + pub fn set_geography(&mut self, value: ::capnp::data::Reader<'_>) { + self.builder.get_pointer_field(6).set_data(value); + } + #[inline] + pub fn init_geography(self, size: u32) -> ::capnp::data::Builder<'a> { + self.builder.get_pointer_field(6).init_data(size) + } + pub fn has_geography(&self) -> bool { + !self.builder.get_pointer_field(6).is_null() + } + #[inline] + pub fn get_internal_id(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(7), ::core::option::Option::None) + } + #[inline] + pub fn set_internal_id(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(7).set_text(value); + } + #[inline] + pub fn init_internal_id(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(7).init_text(size) + } + pub fn has_internal_id(&self) -> bool { + !self.builder.get_pointer_field(7).is_null() + } + #[inline] + pub fn get_data(self) -> ::capnp::Result<::capnp::text::Builder<'a>> { + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(8), ::core::option::Option::None) + } + #[inline] + pub fn set_data(&mut self, value: ::capnp::text::Reader<'_>) { + self.builder.get_pointer_field(8).set_text(value); + } + #[inline] + pub fn init_data(self, size: u32) -> ::capnp::text::Builder<'a> { + self.builder.get_pointer_field(8).init_text(size) + } + pub fn has_data(&self) -> bool { + !self.builder.get_pointer_field(8).is_null() + } + #[inline] + pub fn get_is_frozen(self) -> i8 { + self.builder.get_data_field::(4) + } + #[inline] + pub fn set_is_frozen(&mut self, value: i8) { + self.builder.set_data_field::(4, value); + } + } + + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } + impl ::capnp::capability::FromTypelessPipeline for Pipeline { + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Pipeline { + Pipeline { _typeless: typeless, } + } + } + impl Pipeline { + } + mod _private { + use capnp::private::layout; + pub const STRUCT_SIZE: layout::StructSize = layout::StructSize { data: 1, pointers: 9 }; + pub const TYPE_ID: u64 = 0xc59d_f40d_7a68_8309; + } +} diff --git a/services/json2capnp/src/enum_mappings/mod.rs b/services/json2capnp/src/enum_mappings/mod.rs new file mode 100644 index 000000000..d915d8776 --- /dev/null +++ b/services/json2capnp/src/enum_mappings/mod.rs @@ -0,0 +1,372 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::dataSource_capnp::data_source::Type as DataSourceType; +use crate::household_capnp::household::{ + Category as HouseholdCategory, IncomeLevelGroup as HouseholdIncomeLevelGroup, +}; +use crate::odTrip_capnp::od_trip::{Activity, Mode}; +use crate::person_capnp::person::{AgeGroup, Gender, Occupation}; +//use crate::taxiPoint_capnp::taxi_point::{Device as TaxiDevice, Status as TaxiStatus}; + +pub fn data_source_type(input: &str) -> DataSourceType { + match input { + "none" => DataSourceType::None, + "other" => DataSourceType::Other, + "gtfs" => DataSourceType::Gtfs, + "odTrips" => DataSourceType::OdTrips, + "transitSmartCardData" => DataSourceType::TransitSmartCardData, + "transitOperationalData" => DataSourceType::TransitOperationalData, + "taxiTransactions" => DataSourceType::TaxiTransactions, + "carSharingTransactions" => DataSourceType::CarSharingTransactions, + "bikeSharingTransactions" => DataSourceType::BikeSharingTransactions, + "gpsTraces" => DataSourceType::GpsTraces, + "streetSegmentSpeeds" => DataSourceType::StreetSegmentSpeeds, + "zones" => DataSourceType::Zones, + "osmData" => DataSourceType::OsmData, + "places" => DataSourceType::Places, + "unknown" => DataSourceType::Unknown, + _ => DataSourceType::None + } +} + +pub fn data_source_type_to_str(input: &DataSourceType) -> &str { + match input { + DataSourceType::None => "none", + DataSourceType::Other => "other", + DataSourceType::Gtfs => "gtfs", + DataSourceType::OdTrips => "odTrips", + DataSourceType::TransitSmartCardData => "transitSmartCardData", + DataSourceType::TransitOperationalData => "transitOperationalData", + DataSourceType::TaxiTransactions => "taxiTransactions", + DataSourceType::CarSharingTransactions => "carSharingTransactions", + DataSourceType::BikeSharingTransactions => "bikeSharingTransactions", + DataSourceType::GpsTraces => "gpsTraces", + DataSourceType::StreetSegmentSpeeds => "streetSegmentSpeeds", + DataSourceType::Zones => "zones", + DataSourceType::OsmData => "osmData", + DataSourceType::Places => "places", + DataSourceType::Unknown => "unknown" + } +} + +pub fn household_income_level_group(input: &str) -> HouseholdIncomeLevelGroup { + match input { + "none" => HouseholdIncomeLevelGroup::None, + "veryLow" => HouseholdIncomeLevelGroup::VeryLow, + "low" => HouseholdIncomeLevelGroup::Low, + "medium" => HouseholdIncomeLevelGroup::Medium, + "high" => HouseholdIncomeLevelGroup::High, + "veryHigh" => HouseholdIncomeLevelGroup::VeryHigh, + "unknown" => HouseholdIncomeLevelGroup::Unknown, + _ => HouseholdIncomeLevelGroup::None + } +} + +pub fn household_income_level_group_to_str(input: &HouseholdIncomeLevelGroup) -> &str { + match input { + HouseholdIncomeLevelGroup::None => "none", + HouseholdIncomeLevelGroup::VeryLow => "veryLow", + HouseholdIncomeLevelGroup::Low => "low", + HouseholdIncomeLevelGroup::Medium => "medium", + HouseholdIncomeLevelGroup::High => "high", + HouseholdIncomeLevelGroup::VeryHigh => "veryHigh", + HouseholdIncomeLevelGroup::Unknown => "unknown" + } +} + +pub fn household_category(input: &str) -> HouseholdCategory { + match input { + "none" => HouseholdCategory::None, + "singlePerson" => HouseholdCategory::SinglePerson, + "couple" => HouseholdCategory::Couple, + "monoparentalFamily" => HouseholdCategory::MonoparentalFamily, + "biparentalFamily" => HouseholdCategory::BiparentalFamily, + "unknown" => HouseholdCategory::Unknown, + "other" => HouseholdCategory::Other, + _ => HouseholdCategory::None + } +} + +pub fn household_category_to_str(input: &HouseholdCategory) -> &str { + match input { + HouseholdCategory::None => "none", + HouseholdCategory::SinglePerson => "singlePerson", + HouseholdCategory::Couple => "couple", + HouseholdCategory::MonoparentalFamily => "monoparentalFamily", + HouseholdCategory::BiparentalFamily => "biparentalFamily", + HouseholdCategory::Unknown => "unknown", + HouseholdCategory::Other => "other" + } +} + +pub fn occupation(input: &str) -> Occupation { + match input { + "none" => Occupation::None, + "fullTimeWorker" => Occupation::FullTimeWorker, + "partTimeWorker" => Occupation::PartTimeWorker, + "fullTimeStudent" => Occupation::FullTimeStudent, + "partTimeStudent" => Occupation::PartTimeStudent, + "workerAndStudent" => Occupation::WorkerAndStudent, + "retired" => Occupation::Retired, + "atHome" => Occupation::AtHome, + "other" => Occupation::Other, + "nonApplicable" => Occupation::NonApplicable, + "unknown" => Occupation::Unknown, + _ => Occupation::None + } +} + +pub fn occupation_to_str(input: &Occupation) -> &str { + match input { + Occupation::None => "none", + Occupation::FullTimeWorker => "fullTimeWorker", + Occupation::PartTimeWorker => "partTimeWorker", + Occupation::FullTimeStudent => "fullTimeStudent", + Occupation::PartTimeStudent => "partTimeStudent", + Occupation::WorkerAndStudent => "workerAndStudent", + Occupation::Retired => "retired", + Occupation::AtHome => "atHome", + Occupation::Other => "other", + Occupation::NonApplicable => "nonApplicable", + Occupation::Unknown => "unknown" + } +} + +pub fn gender(input: &str) -> Gender { + match input { + "none" => Gender::None, + "female" => Gender::Female, + "male" => Gender::Male, + "custom" => Gender::Custom, + "unknown" => Gender::Unknown, + _ => Gender::None + } +} + +pub fn gender_to_str(input: &Gender) -> &str { + match input { + Gender::None => "none", + Gender::Female => "female", + Gender::Male => "male", + Gender::Custom => "custom", + Gender::Unknown => "unknown" + } +} + +pub fn age_group(input: &str) -> AgeGroup { + match input { + "none" => AgeGroup::None, + "ag0004" => AgeGroup::Ag0004, + "ag0509" => AgeGroup::Ag0509, + "ag1014" => AgeGroup::Ag1014, + "ag1519" => AgeGroup::Ag1519, + "ag2024" => AgeGroup::Ag2024, + "ag2529" => AgeGroup::Ag2529, + "ag3034" => AgeGroup::Ag3034, + "ag3539" => AgeGroup::Ag3539, + "ag4044" => AgeGroup::Ag4044, + "ag4549" => AgeGroup::Ag4549, + "ag5054" => AgeGroup::Ag5054, + "ag5559" => AgeGroup::Ag5559, + "ag6064" => AgeGroup::Ag6064, + "ag6569" => AgeGroup::Ag6569, + "ag7074" => AgeGroup::Ag7074, + "ag7579" => AgeGroup::Ag7579, + "ag8084" => AgeGroup::Ag8084, + "ag8589" => AgeGroup::Ag8589, + "ag9094" => AgeGroup::Ag9094, + "ag95plus" => AgeGroup::Ag95plus, + "unknown" => AgeGroup::Unknown, + _ => AgeGroup::None + } +} + +pub fn age_group_to_str(input: &AgeGroup) -> &str { + match input { + AgeGroup::None => "none", + AgeGroup::Ag0004 => "ag0004", + AgeGroup::Ag0509 => "ag0509", + AgeGroup::Ag1014 => "ag1014", + AgeGroup::Ag1519 => "ag1519", + AgeGroup::Ag2024 => "ag2024", + AgeGroup::Ag2529 => "ag2529", + AgeGroup::Ag3034 => "ag3034", + AgeGroup::Ag3539 => "ag3539", + AgeGroup::Ag4044 => "ag4044", + AgeGroup::Ag4549 => "ag4549", + AgeGroup::Ag5054 => "ag5054", + AgeGroup::Ag5559 => "ag5559", + AgeGroup::Ag6064 => "ag6064", + AgeGroup::Ag6569 => "ag6569", + AgeGroup::Ag7074 => "ag7074", + AgeGroup::Ag7579 => "ag7579", + AgeGroup::Ag8084 => "ag8084", + AgeGroup::Ag8589 => "ag8589", + AgeGroup::Ag9094 => "ag9094", + AgeGroup::Ag95plus => "ag95plus", + AgeGroup::Unknown => "unknown", + } +} + +pub fn mode(input: &str) -> Mode { + match input { + "none" => Mode::None, + "walking" => Mode::Walking, + "cycling" => Mode::Cycling, + "carDriver" => Mode::CarDriver, + "carPassenger" => Mode::CarPassenger, + "motorcycle" => Mode::Motorcycle, + "transit" => Mode::Transit, + "paratransit" => Mode::Paratransit, + "taxi" => Mode::Taxi, + "schoolBus" => Mode::SchoolBus, + "otherBus" => Mode::OtherBus, + "intercityBus" => Mode::IntercityBus, + "intercityTrain" => Mode::IntercityTrain, + "plane" => Mode::Plane, + "ferry" => Mode::Ferry, + "parkAndRide" => Mode::ParkAndRide, + "kissAndRide" => Mode::KissAndRide, + "bikeAndRide" => Mode::BikeAndRide, + "multimodalOther" => Mode::MultimodalOther, + "other" => Mode::Other, + "unknown" => Mode::Unknown, + _ => Mode::None + } +} + +pub fn mode_to_str(input: &Mode) -> &str { + match input { + Mode::None => "none", + Mode::Walking => "walking", + Mode::Cycling => "cycling", + Mode::CarDriver => "carDriver", + Mode::CarPassenger => "carPassenger", + Mode::Motorcycle => "motorcycle", + Mode::Transit => "transit", + Mode::Paratransit => "paratransit", + Mode::Taxi => "taxi", + Mode::SchoolBus => "schoolBus", + Mode::OtherBus => "otherBus", + Mode::IntercityBus => "intercityBus", + Mode::IntercityTrain => "intercityTrain", + Mode::Plane => "plane", + Mode::Ferry => "ferry", + Mode::ParkAndRide => "parkAndRide", + Mode::KissAndRide => "kissAndRide", + Mode::BikeAndRide => "bikeAndRide", + Mode::MultimodalOther => "multimodalOther", + Mode::Other => "other", + Mode::Unknown => "unknown" + } +} + +pub fn activity(input: &str) -> Activity { + match input { + "none" => Activity::None, + "home" => Activity::Home, + "workUsual" => Activity::WorkUsual, + "workNonUsual" => Activity::WorkNonUsual, + "schoolUsual" => Activity::SchoolUsual, + "schoolNonUsual" => Activity::SchoolNonUsual, + "shopping" => Activity::Shopping, + "leisure" => Activity::Leisure, + "service" => Activity::Service, + "secondaryHome" => Activity::SecondaryHome, + "visitingFriends" => Activity::VisitingFriends, + "dropSomeone" => Activity::DropSomeone, + "fetchSomeone" => Activity::FetchSomeone, + "restaurant" => Activity::Restaurant, + "medical" => Activity::Medical, + "worship" => Activity::Worship, + "onTheRoad" => Activity::OnTheRoad, + "other" => Activity::Other, + "unknown" => Activity::Unknown, + _ => Activity::None + } +} + +pub fn activity_to_str(input: &Activity) -> &str { + match input { + Activity::None => "none", + Activity::Home => "home", + Activity::WorkUsual => "workUsual", + Activity::WorkNonUsual => "workNonUsual", + Activity::SchoolUsual => "schoolUsual", + Activity::SchoolNonUsual => "schoolNonUsual", + Activity::Shopping => "shopping", + Activity::Leisure => "leisure", + Activity::Service => "service", + Activity::SecondaryHome => "secondaryHome", + Activity::VisitingFriends => "visitingFriends", + Activity::DropSomeone => "dropSomeone", + Activity::FetchSomeone => "fetchSomeone", + Activity::Restaurant => "restaurant", + Activity::Medical => "medical", + Activity::Worship => "worship", + Activity::OnTheRoad => "onTheRoad", + Activity::Other => "other", + Activity::Unknown => "unknown" + } +} + +/*pub fn taxi_status(input: &str) -> TaxiStatus { + match input { + "none" => TaxiStatus::None, + "free" => TaxiStatus::Free, + "occupied" => TaxiStatus::Occupied, + "unavailable" => TaxiStatus::Unavailable, + "oncoming" => TaxiStatus::Oncoming, + "other" => TaxiStatus::Other, + "unknown" => TaxiStatus::Unknown, + "answering" => TaxiStatus::Answering, + "off" => TaxiStatus::Off, + _ => TaxiStatus::None + } +} + +pub fn taxi_status_to_str(input: &TaxiStatus) -> &str { + match input { + TaxiStatus::None => "none", + TaxiStatus::Free => "free", + TaxiStatus::Occupied => "occupied", + TaxiStatus::Unavailable => "unavailable", + TaxiStatus::Oncoming => "oncoming", + TaxiStatus::Other => "other", + TaxiStatus::Unknown => "unknown", + TaxiStatus::Answering => "answering", + TaxiStatus::Off => "off" + } +} + +pub fn taxi_device(input: &str) -> TaxiDevice { + match input { + "none" => TaxiDevice::None, + "phone" => TaxiDevice::Phone, + "tablet" => TaxiDevice::Tablet, + "taximeter" => TaxiDevice::Taximeter, + "otherdevice" => TaxiDevice::Otherdevice, + "other" => TaxiDevice::Other, + "unknown" => TaxiDevice::Unknown, + _ => TaxiDevice::None + } +} + +pub fn taxi_device_to_str(input: &TaxiDevice) -> &str { + match input { + TaxiDevice::None => "none", + TaxiDevice::Phone => "phone", + TaxiDevice::Tablet => "tablet", + TaxiDevice::Taximeter => "taximeter", + TaxiDevice::Otherdevice => "otherdevice", + TaxiDevice::Other => "other", + TaxiDevice::Unknown => "unknown" + } +} +*/ \ No newline at end of file diff --git a/services/json2capnp/src/errors/mod.rs b/services/json2capnp/src/errors/mod.rs new file mode 100644 index 000000000..119cad929 --- /dev/null +++ b/services/json2capnp/src/errors/mod.rs @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use std::error::Error; +use std::fmt; + +#[derive(Debug)] +pub struct TrError { + details: String +} + +impl TrError { + pub fn new(msg: &str) -> TrError { + TrError{details: msg.to_string()} + } +} + +impl fmt::Display for TrError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f,"{}",self.details) + } +} + +impl Error for TrError { + fn description(&self) -> &str { + &self.details + } +} \ No newline at end of file diff --git a/services/json2capnp/src/main.rs b/services/json2capnp/src/main.rs new file mode 100644 index 000000000..fafc5e490 --- /dev/null +++ b/services/json2capnp/src/main.rs @@ -0,0 +1,168 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use dotenv; +use home; +use rouille::Request; +use rouille::Response; +use std::fs; +use std::io; +use std::path::Path; +use std::env; + +#[macro_use] +extern crate rouille; + +#[macro_use] +extern crate serde_json; + +mod enum_mappings; +mod my_error; +mod routers; +mod utils; + +include!("./capnp/include.rs"); + +fn main() { + + let args: Vec = env::args().collect(); + + let port: u16; + let cache_directory: Option; + + // TODO Handle command line arguments with --argName [argValue] + match args.len() { + 1 => { + println!("no argument, using default port 2000"); + port = 2000; + cache_directory = None; + }, + 2 => { + println!("using port in arguments: {}", &args[1]); + port = args[1].parse().unwrap(); + cache_directory = None; + }, + 3 => { + println!("using port and relative path in arguments: {}, {}", &args[1], &args[2]); + port = args[1].parse().unwrap(); + cache_directory = Some(args[2].parse().unwrap()); + }, + _ => { + println!("too many arguments, using default port 2000"); + port = 2000; + cache_directory = None; + } + } + + println!("Starting json2capnp server..."); + + // setup dotenv: + let my_env_path = home::home_dir() + .and_then(|a| Some(a.join("/../../../.env"))) + .unwrap(); + dotenv::from_path(my_env_path.as_path()).ok(); + let project_shortname = dotenv::var("PROJECT_SHORTNAME").unwrap(); + let project_cache_directory_path_str = cache_directory.unwrap_or(format!( + "../../projects/{}/cache/{}", project_shortname, project_shortname + )); + println!("Using {} as cache directory", + project_cache_directory_path_str + ); + + let project_cache_directory_path = + fs::canonicalize(Path::new(&project_cache_directory_path_str)).expect("Cache directory does not exist"); + + println!( + "Port {} | Using project {}", + port, + project_shortname + ); + + let handle_request = move |request: &Request| -> Response { + + // setup config: + let mut config: serde_json::Value = json!({ + "project_cache_directory_path": project_cache_directory_path.to_str().unwrap(), + "custom_subdirectory_path" : json!(null), + "project_shortname" : json!(project_shortname), + "data_source_uuid" : json!(null) + }); + + match &request.get_param("cache_directory_path") { + Some(cache_directory_path) => { + println!("request cache_directory_path {}", cache_directory_path); + config["custom_subdirectory_path"] = json!(format!("{}", cache_directory_path)); + }, + _ => {} + } + + match &request.get_param("data_source_uuid") { + Some(data_source_uuid) => { + println!("request data_source_uuid {}", data_source_uuid); + config["data_source_uuid"] = json!(format!("{}", data_source_uuid)); + }, + _ => {} + } + + let object_uuid = match &request.get_param("uuid") { + Some(uuid) => { + uuid.to_owned() + }, + _ => String::from("").to_owned() + }; + + rouille::log(&request, io::stdout(), || { + router!(request, + (GET) (/) => { + // When viewing the home page, we return an HTML document described below. + Response::text(format!("empty response")) + }, + + (POST) (/dataSources) => { routers::write_collection_route("dataSources", "dataSources", &config, &routers::data_source_collection_router::write_collection, request) }, + (POST) (/agencies) => { routers::write_collection_route("agencies", "agencies", &config, &routers::agency_collection_router::write_collection, request) }, + (POST) (/garages) => { routers::write_collection_route("garages", "garages", &config, &routers::garage_collection_router::write_collection, request) }, + (POST) (/paths) => { routers::write_collection_route("paths", "paths", &config, &routers::path_collection_router::write_collection, request) }, + (POST) (/nodes) => { routers::write_collection_route("nodes", "nodes", &config, &routers::node_collection_router::write_collection, request) }, + (POST) (/node) => { routers::write_object_route("node", "nodes", &config, &routers::node_router::write_object, request) }, + (POST) (/households) => { routers::write_collection_route("households", "households", &config, &routers::household_collection_router::write_collection, request) }, + (POST) (/lines) => { routers::write_collection_route("lines", "lines", &config, &routers::line_collection_router::write_collection, request) }, + (POST) (/line) => { routers::write_object_route("line", "lines", &config, &routers::line_router::write_object, request) }, + (POST) (/odTrips) => { routers::write_collection_route("odTrips", "odTrips", &config, &routers::od_trip_collection_router::write_collection, request) }, + (POST) (/persons) => { routers::write_collection_route("persons", "persons", &config, &routers::person_collection_router::write_collection, request) }, + (POST) (/places) => { routers::write_collection_route("places", "places", &config, &routers::place_collection_router::write_collection, request) }, + (POST) (/scenarios) => { routers::write_collection_route("scenarios", "scenarios", &config, &routers::scenario_collection_router::write_collection, request) }, + (POST) (/services) => { routers::write_collection_route("services", "services", &config, &routers::service_collection_router::write_collection, request) }, + (POST) (/zones) => { routers::write_collection_route("zones", "zones", &config, &routers::zone_collection_router::write_collection, request) }, + (POST) (/units) => { routers::write_collection_route("units", "units", &config, &routers::unit_collection_router::write_collection, request) }, + + // taxi: + //(POST) (/taxiPoints) => { routers::write_route("taxiPoints", "items", &config, &routers::taxi_point_collection_router::write_collection, request) }, + (GET) (/dataSources) => { routers::read_collection_route("dataSources", "dataSources", &config, &routers::data_source_collection_router::read_collection) }, + (GET) (/agencies) => { routers::read_collection_route("agencies", "agencies", &config, &routers::agency_collection_router::read_collection) }, + (GET) (/garages) => { routers::read_collection_route("garages", "garages", &config, &routers::garage_collection_router::read_collection) }, + (GET) (/paths) => { routers::read_collection_route("paths", "paths", &config, &routers::path_collection_router::read_collection) }, + (GET) (/nodes) => { routers::read_collection_route("nodes", "nodes", &config, &routers::node_collection_router::read_collection) }, + (GET) (/node) => { routers::read_object_route("node", &object_uuid, "nodes", &config, &routers::node_router::read_object) }, + (GET) (/households) => { routers::read_collection_route("households", "households", &config, &routers::household_collection_router::read_collection) }, + (GET) (/lines) => { routers::read_collection_route("lines", "lines", &config, &routers::line_collection_router::read_collection) }, + (GET) (/line) => { routers::read_object_route("line", &object_uuid, "lines", &config, &routers::line_router::read_object) }, + (GET) (/odTrips) => { routers::read_collection_route("odTrips", "odTrips", &config, &routers::od_trip_collection_router::read_collection) }, + (GET) (/persons) => { routers::read_collection_route("persons", "persons", &config, &routers::person_collection_router::read_collection) }, + (GET) (/places) => { routers::read_collection_route("places", "places", &config, &routers::place_collection_router::read_collection) }, + (GET) (/scenarios) => { routers::read_collection_route("scenarios", "scenarios", &config, &routers::scenario_collection_router::read_collection) }, + (GET) (/services) => { routers::read_collection_route("services", "services", &config, &routers::service_collection_router::read_collection) }, + (GET) (/zones) => { routers::read_collection_route("zones", "zones", &config, &routers::zone_collection_router::read_collection) }, + (GET) (/units) => { routers::read_collection_route("units", "units", &config, &routers::unit_collection_router::read_collection) }, + + _ => rouille::Response::empty_404() + ) + }) + }; + + rouille::start_server(format!("0.0.0.0:{}", port), handle_request); +} diff --git a/services/json2capnp/src/my_error/mod.rs b/services/json2capnp/src/my_error/mod.rs new file mode 100644 index 000000000..b150a68b2 --- /dev/null +++ b/services/json2capnp/src/my_error/mod.rs @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +/*use std::error::Error; +use std::fmt; + +#[derive(Debug)] +pub struct MyError { + details: String +} + +impl MyError { + pub fn new(msg: &str) -> MyError { + MyError{details: msg.to_string()} + } +} + +impl fmt::Display for MyError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f,"{}",self.details) + } +} + +impl Error for MyError { + fn description(&self) -> &str { + &self.details + } +}*/ \ No newline at end of file diff --git a/services/json2capnp/src/routers/agency_collection_router.rs b/services/json2capnp/src/routers/agency_collection_router.rs new file mode 100644 index 000000000..7431ccf3a --- /dev/null +++ b/services/json2capnp/src/routers/agency_collection_router.rs @@ -0,0 +1,222 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::agencyCollection_capnp::agency_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["agencies"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_agencies(count as u32); + + for i in 0..count { + let json_data = &json_objects[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_simulation_uuid(&optional_string(json_data.get("simulation_id"))); + capnp_data.set_acronym(&optional_string(json_data.get("acronym"))); + capnp_data.set_name(&optional_string(json_data.get("name"))); + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_color(&optional_string(json_data.get("color"))); + capnp_data.set_description(&optional_string(json_data.get("description"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(json_data.get("is_enabled").unwrap_or(&json!(null)))); + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_agencies()?.len() as usize); + + for capnp_object in capnp_collection.get_agencies()?.iter() { + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "simulation_id": empty_str_to_json_null(capnp_object.get_simulation_uuid()?), + "acronym": empty_str_to_json_null(capnp_object.get_acronym()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "data": data_attributes + }); + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "agencies": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn agency_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "agencies": [ + { + "id": "1234-1234", + "internal_id": "internalId", + "is_enabled": null, + "is_frozen": true, + "color": "#FFFFFF", + "description": "testDescription", + "name": "Name", + "acronym": "ACR", + "simulation_id": null, + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345" + }, + { + "id": "2345-2345", + "is_enabled": true, + "is_frozen": false, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "agencies": [ + { + "id": "1234-1234", + "internal_id": "internalId", + "is_enabled": null, + "is_frozen": true, + "color": "#FFFFFF", + "description": "testDescription", + "name": "Name", + "acronym": "ACR", + "simulation_id": null, + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "internal_id": null, + "is_enabled": null, + "is_frozen": null, + "color": null, + "description": null, + "name": null, + "acronym": null, + "simulation_id": null, + "data": {} + }, + { + "id": "2345-2345", + "internal_id": null, + "is_enabled": true, + "is_frozen": false, + "color": null, + "description": null, + "name": null, + "acronym": null, + "simulation_id": null, + "data": {} + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/agencies", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "agencies", + "agencies", + &config, + &routers::agency_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "agencies", + "agencies", + &config, + &routers::agency_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["agencies"], json_compare_data["agencies"]); + + } +} diff --git a/services/json2capnp/src/routers/data_source_collection_router.rs b/services/json2capnp/src/routers/data_source_collection_router.rs new file mode 100644 index 000000000..a757f2f54 --- /dev/null +++ b/services/json2capnp/src/routers/data_source_collection_router.rs @@ -0,0 +1,204 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::dataSourceCollection_capnp::data_source_collection as collection; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["dataSources"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_data_sources(count as u32); + + for i in 0..count { + let json_data = &json_objects[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_name(&optional_string(json_data.get("name"))); + capnp_data.set_shortname(&optional_string(json_data.get("shortname"))); + capnp_data.set_description(&optional_string(json_data.get("description"))); + capnp_data.set_type(crate::enum_mappings::data_source_type(&json_data["type"].as_str().unwrap_or("none"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_data_sources()?.len() as usize); + + for capnp_object in capnp_collection.get_data_sources()?.iter() { + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "shortname": empty_str_to_json_null(capnp_object.get_shortname()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "type": crate::enum_mappings::data_source_type_to_str(&capnp_object.get_type()?), + "data": data_attributes + }); + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "dataSources": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn data_source_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "dataSources": [ + { + "id": "1234-1234", + "is_frozen": true, + "description": "testDescription", + "name": "Name", + "shortname": "Shortname", + "type": "odTrips", + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "is_frozen": null + }, + { + "type": null, + "id": "2345-2345", + "is_frozen": false, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "dataSources": [ + { + "id": "1234-1234", + "is_frozen": true, + "description": "testDescription", + "name": "Name", + "shortname": "Shortname", + "type": "odTrips", + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "is_frozen": null, + "description": null, + "name": null, + "shortname": null, + "type": "none", + "data": {} + }, + { + "id": "2345-2345", + "is_frozen": false, + "description": null, + "name": null, + "shortname": null, + "type": "none", + "data": {} + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/dataSources", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "dataSources", + "dataSources", + &config, + &routers::data_source_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "dataSources", + "dataSources", + &config, + &routers::data_source_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["dataSources"], json_compare_data["dataSources"]); + + } +} diff --git a/services/json2capnp/src/routers/garage_collection_router.rs b/services/json2capnp/src/routers/garage_collection_router.rs new file mode 100644 index 000000000..4164d33b2 --- /dev/null +++ b/services/json2capnp/src/routers/garage_collection_router.rs @@ -0,0 +1,273 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::garageCollection_capnp::garage_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::GeoJson; +use geobuf; +use protobuf::Message; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let geojson_data : GeoJson = GeoJson::from_json_value((json["garages"]).clone()).unwrap(); + + match geojson_data { + geojson::GeoJson::FeatureCollection(feature_collection) => { + + let features_count = feature_collection.features.len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_garages(features_count as u32); + for i in 0..features_count { + let feature = &feature_collection.features[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + let properties = feature.properties.as_ref().unwrap(); + capnp_data.set_uuid(properties.get("id").unwrap().as_str().unwrap()); // required + capnp_data.set_id(properties.get("integer_id").unwrap().as_i64().unwrap() as i32); // required + capnp_data.set_agency_uuid(properties.get("agency_id").unwrap().as_str().unwrap()); // required + capnp_data.set_name(&crate::utils::json_null_to_empty_str(&properties.get("name").unwrap_or(&json!(null)))); + capnp_data.set_color(&crate::utils::json_null_to_empty_str(&properties.get("color").unwrap_or(&json!(null)))); + capnp_data.set_internal_id(&crate::utils::json_null_to_empty_str(&properties.get("internal_id").unwrap_or(&json!(null)))); + capnp_data.set_description(&crate::utils::json_null_to_empty_str(&properties.get("description").unwrap_or(&json!(null)))); + capnp_data.set_data(&properties.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(crate::utils::json_boolean_to_i8(&properties.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(crate::utils::json_boolean_to_i8(&properties.get("is_enabled").unwrap_or(&json!(null)))); + + let geojson_json = json!({ + "type": "Feature", + "properties": {}, + "geometry": feature.geometry.as_ref().unwrap() + }); + let geobuf = geobuf::encode::Encoder::encode(&geojson_json, 6, 2).unwrap().write_to_bytes().unwrap(); + + capnp_data.set_geography(&geobuf); + //capnp_data.set_geography(&geojson_json["geometry"].to_string().as_str()); + + } + serialize_packed::write_message(file, &message) + }, + _ => { + Err(capnp::Error::failed(String::from("Garages geojson is invalid, empty or not a FeatureCollection"))) + } + } + +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_garages()?.len() as usize); + + for capnp_object in capnp_collection.get_garages()?.iter() { + + let integer_id = capnp_object.get_id() as i32; + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let properties_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": integer_id, + "agency_id": capnp_object.get_agency_uuid()?, + "internal_id": crate::utils::empty_str_to_json_null(capnp_object.get_internal_id()?), + "name": crate::utils::empty_str_to_json_null(capnp_object.get_name()?), + "description": crate::utils::empty_str_to_json_null(capnp_object.get_description()?), + "color": crate::utils::empty_str_to_json_null(capnp_object.get_color()?), + "is_frozen": crate::utils::i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": crate::utils::i8_to_json_boolean(capnp_object.get_is_enabled()), + "data": data_attributes + }); + + let mut geobuf_data = geobuf::geobuf_pb::Data::new(); + + geobuf_data.merge_from_bytes(&capnp_object.get_geography().unwrap()).unwrap(); + let mut geojson : serde_json::Value = geobuf::decode::Decoder::decode(&geobuf_data).unwrap_or(json!({ + "geometry": null + })); + + geojson["id"] = json!(integer_id); + geojson["properties"] = properties_json; + + collection_json_vec.push(geojson); + + } + + Ok(json!({ + "garages": { + "type": "FeatureCollection", + "features": serde_json::Value::Array(collection_json_vec) + } + })) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn garage_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "garages": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 234, + "properties": { + "id": "515923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "isNew": false, + "foo": "bar" + }, + "name": "GarageName", + "color": "#1F1F1F", + "agency_id": "83269525-9100-45b3-b00b-67b5d5a3f12d", + "is_frozen": false, + "created_at": "2020-01-01T15:15:15.054321-04:00", + "integer_id": 234, + "is_enabled": true, + "updated_at": null, + "description": "description for garage", + "internal_id": "Garage1" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[-76.963302,42.639486],[-75.963302,43.639486],[-74.963302,44.639486],[-76.963302,42.639486]]] + }, + "id": 235, + "properties": { + "id": "615923f9-a768-49e5-81b6-8237d60a6125", + "agency_id": "73269525-9100-45b3-b00b-67b5d5a3f12d", + "integer_id": 235 + } + } + ] + } + } + "##; + + let compare_data = r##" + { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 234, + "properties": { + "id": "515923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "isNew": false, + "foo": "bar" + }, + "name": "GarageName", + "color": "#1F1F1F", + "agency_id": "83269525-9100-45b3-b00b-67b5d5a3f12d", + "is_frozen": false, + "integer_id": 234, + "is_enabled": true, + "description": "description for garage", + "internal_id": "Garage1" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[-76.963302,42.639486],[-75.963302,43.639486],[-74.963302,44.639486],[-76.963302,42.639486]]] + }, + "id": 235, + "properties": { + "id": "615923f9-a768-49e5-81b6-8237d60a6125", + "data": {}, + "name": null, + "color": null, + "agency_id": "73269525-9100-45b3-b00b-67b5d5a3f12d", + "is_frozen": null, + "integer_id": 235, + "is_enabled": null, + "description": null, + "internal_id": null + } + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/garages", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "garages", + "garages", + &config, + &routers::garage_collection_router::write_collection, + &request, + ); + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "garages", + "garages", + &config, + &routers::garage_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["garages"], json_compare_data); + + } +} diff --git a/services/json2capnp/src/routers/household_collection_router.rs b/services/json2capnp/src/routers/household_collection_router.rs new file mode 100644 index 000000000..6fb7393e2 --- /dev/null +++ b/services/json2capnp/src/routers/household_collection_router.rs @@ -0,0 +1,343 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::householdCollection_capnp::household_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::{Value as GeojsonValue}; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + minus_one_i64_to_null, + minus_one_f64_to_null, + json_value_or_null_to_i64_or_minus_one, + json_value_or_null_to_f64_or_minus_one +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["households"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_households(count as u32); + + for i in 0..count { + let mut json_data = json_objects[i].clone(); + + let geometry = geojson::Geometry::from_json_value(json_data["home_geography"].clone()); + let geojson_value = geometry.unwrap().value; + let latitude; + let longitude; + match geojson_value { + GeojsonValue::Point(point) => { + longitude = (point[0] * 1000000.0).round() as i32; + latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + longitude = -1; + latitude = -1; + } + } + + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_id(json_data.get("integer_id").unwrap().as_u64().unwrap() as u32); // required + capnp_data.set_data_source_uuid(&optional_string(json_data.get("data_source_id"))); + capnp_data.set_size(json_value_or_null_to_i64_or_minus_one(&json_data.get("size").unwrap_or(&json!(null))) as i8); + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + + capnp_data.set_income_level_group(crate::enum_mappings::household_income_level_group(&json_data["income_level_group"].as_str().unwrap_or("none"))); + capnp_data.set_category(crate::enum_mappings::household_category(&json_data["category"].as_str().unwrap_or("none"))); + capnp_data.set_income_level(json_value_or_null_to_i64_or_minus_one(&json_data.get("income_level").unwrap_or(&json!(null))) as i32); + capnp_data.set_car_number(json_value_or_null_to_i64_or_minus_one(&json_data.get("car_number").unwrap_or(&json!(null))) as i8); + capnp_data.set_expansion_factor(json_value_or_null_to_f64_or_minus_one(&json_data.get("expansion_factor").unwrap_or(&json!(null))) as f32); + capnp_data.set_home_latitude(latitude); + capnp_data.set_home_longitude(longitude); + + if json_data.get("data") != None && json_data["data"].is_object() && json_data["data"].get("homeNodes") != None && json_data["data"]["homeNodes"].is_array() + { + let nodes_count = json_data["data"]["homeNodes"].as_array().unwrap().len(); + capnp_data.reborrow().init_home_nodes_uuids(nodes_count as u32); + capnp_data.reborrow().init_home_nodes_travel_times(nodes_count as u32); + capnp_data.reborrow().init_home_nodes_distances(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_home_nodes_uuids().unwrap().set(j as u32, json_data["data"]["homeNodes"][j].as_str().unwrap()); + capnp_data.reborrow().get_home_nodes_travel_times().unwrap().set(j as u32, json_data["data"]["homeNodesTravelTimes"][j].as_i64().unwrap() as i16); + capnp_data.reborrow().get_home_nodes_distances().unwrap().set(j as u32, json_data["data"]["homeNodesDistances"][j].as_i64().unwrap() as i16); + } + + // remove homeNodes and associates: + json_data["data"]["homeNodes"].take(); + json_data["data"]["homeNodesTravelTimes"].take(); + json_data["data"]["homeNodesDistances"].take(); + } + + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_households()?.len() as usize); + + for capnp_object in capnp_collection.get_households()?.iter() { + + let mut data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let latitude = (capnp_object.get_home_latitude() as f64)/1000000.0; + let longitude = (capnp_object.get_home_longitude() as f64)/1000000.0; + + if capnp_object.has_home_nodes_uuids() + { + let mut home_nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_home_nodes_uuids()?.len() as usize); + for home_node_uuid in capnp_object.get_home_nodes_uuids()?.iter() { + home_nodes_uuids.push(json!(home_node_uuid.unwrap())); + } + data_attributes["homeNodes"] = json!(home_nodes_uuids); + + let mut home_nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_home_nodes_travel_times()?.len() as usize); + for home_node_travel_time in capnp_object.get_home_nodes_travel_times()?.iter() { + home_nodes_travel_times.push(json!(home_node_travel_time)); + } + data_attributes["homeNodesTravelTimes"] = json!(home_nodes_travel_times); + + let mut home_nodes_distances : Vec = Vec::with_capacity(capnp_object.get_home_nodes_distances()?.len() as usize); + for home_node_distance in capnp_object.get_home_nodes_distances()?.iter() { + home_nodes_distances.push(json!(home_node_distance)); + } + data_attributes["homeNodesDistances"] = json!(home_nodes_distances); + } + + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": capnp_object.get_id(), + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "data_source_id": empty_str_to_json_null(capnp_object.get_data_source_uuid()?), + "size": minus_one_i64_to_null(capnp_object.get_size() as i64), + "income_level_group": crate::enum_mappings::household_income_level_group_to_str(&capnp_object.get_income_level_group()?), + "category": crate::enum_mappings::household_category_to_str(&capnp_object.get_category()?), + "income_level": minus_one_i64_to_null(capnp_object.get_income_level() as i64), + "car_number": minus_one_i64_to_null(capnp_object.get_car_number() as i64), + "expansion_factor": minus_one_f64_to_null(((capnp_object.get_expansion_factor() as f64)*100000.0).round() / 100000.0), // we must round to 5 decimals so we don't get numbers like 2.10000000345454 for n input value of 2.1 + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "data": data_attributes, + "home_geography": { + "type": "Point", + "coordinates": [longitude, latitude] + } + }); + + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "households": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn household_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test", + "data_source_uuid" : "4567-8910" + }); + + let data = r##" + { + "data_source_uuid": "4567-8910", + "households": [ + { + "id": "1234-1234", + "is_frozen": true, + "integer_id": 1234, + "internal_id": "h21", + "data_source_id": "4567-8910", + "size": 4, + "income_level_group": "veryLow", + "category": "monoparentalFamily", + "income_level": 235000, + "car_number": 2, + "expansion_factor": 23.3, + "home_geography": { + "type": "Point", + "coordinates": [-73.45, 45.47] + }, + "data": { + "foo": "bar", + "homeNodes": ["abc", "def", "efg"], + "homeNodesTravelTimes": [234, 567, 8910], + "homeNodesDistances": [1243, 3453, 9455] + } + }, + { + "id": "2345-2345", + "integer_id": 5678, + "is_frozen": null, + "home_geography": { + "type": "Point", + "coordinates": [-73.20, 45.20] + } + }, + { + "type": null, + "integer_id": 9101112, + "id": "2345-2345", + "is_frozen": false, + "home_geography": { + "type": "Point", + "coordinates": [-73.75, 45.78] + }, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "data_source_uuid": "4567-8910", + "households": [ + { + "id": "1234-1234", + "integer_id": 1234, + "is_frozen": true, + "internal_id": "h21", + "data_source_id": "4567-8910", + "size": 4, + "income_level_group": "veryLow", + "category": "monoparentalFamily", + "income_level": 235000, + "car_number": 2, + "expansion_factor": 23.3, + "home_geography": { + "type": "Point", + "coordinates": [-73.45, 45.47] + }, + "data": { + "foo": "bar", + "homeNodes": ["abc", "def", "efg"], + "homeNodesTravelTimes": [234, 567, 8910], + "homeNodesDistances": [1243, 3453, 9455] + } + }, + { + "id": "2345-2345", + "integer_id": 5678, + "is_frozen": null, + "internal_id": null, + "data_source_id": null, + "size": null, + "income_level_group": "none", + "category": "none", + "income_level": null, + "car_number": null, + "expansion_factor": null, + "data": {}, + "home_geography": { + "type": "Point", + "coordinates": [-73.20, 45.20] + } + }, + { + "id": "2345-2345", + "integer_id": 9101112, + "is_frozen": false, + "internal_id": null, + "data_source_id": null, + "size": null, + "income_level_group": "none", + "category": "none", + "income_level": null, + "car_number": null, + "expansion_factor": null, + "home_geography": { + "type": "Point", + "coordinates": [-73.75, 45.78] + }, + "data": {} + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/households", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "households", + "households", + &config, + &routers::household_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "households", + "households", + &config, + &routers::household_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["households"], json_compare_data["households"]); + + } +} \ No newline at end of file diff --git a/services/json2capnp/src/routers/line_collection_router.rs b/services/json2capnp/src/routers/line_collection_router.rs new file mode 100644 index 000000000..e0de99a67 --- /dev/null +++ b/services/json2capnp/src/routers/line_collection_router.rs @@ -0,0 +1,267 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::lineCollection_capnp::line_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["lines"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_lines(count as u32); + + for i in 0..count { + let json_data = &json_objects[i]; + let uuid: &str = &required_string(json_data.get("id")); + + println!("Writing cache for line uuid {}", uuid); + + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_agency_uuid(&required_string(json_data.get("agency_id"))); + capnp_data.set_shortname(&optional_string(json_data.get("shortname"))); + capnp_data.set_longname(&optional_string(json_data.get("longname"))); + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_category(&optional_string(json_data.get("category"))); + capnp_data.set_mode(&required_string(json_data.get("mode"))); + capnp_data.set_color(&optional_string(json_data.get("color"))); + capnp_data.set_description(&optional_string(json_data.get("description"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(json_data.get("is_enabled").unwrap_or(&json!(null)))); + capnp_data.set_is_autonomous(json_boolean_to_i8(json_data.get("is_autonomous").unwrap_or(&json!(null)))); + capnp_data.set_allow_same_line_transfers(json_boolean_to_i8(json_data.get("allow_same_line_transfers").unwrap_or(&json!(null)))); + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_lines()?.len() as usize); + + for capnp_object in capnp_collection.get_lines()?.iter() { + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "agency_id": capnp_object.get_agency_uuid()?, + "shortname": capnp_object.get_shortname()?, + "longname": empty_str_to_json_null(capnp_object.get_longname()?), + "category": empty_str_to_json_null(capnp_object.get_category()?), + "mode": capnp_object.get_mode()?, + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "is_autonomous": i8_to_json_boolean(capnp_object.get_is_autonomous()), + "allow_same_line_transfers": i8_to_json_boolean(capnp_object.get_allow_same_line_transfers()), + "data": data_attributes + }); + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "lines": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn line_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "lines": [ + { + "id": "1234-1234", + "agency_id": "2345-2345", + "internal_id": "internalId", + "is_enabled": true, + "is_frozen": true, + "color": "#FFAAFF", + "shortname": "23A", + "longname": "LineLongname", + "mode": "rail", + "category": "B", + "description": "testDescription", + "is_autonomous": false, + "allow_same_line_transfers": true, + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "agency_id": "4567-4567", + "shortname": "123ABC", + "mode": "bus" + }, + { + "id": "3456-3456", + "agency_id": "5678-5678", + "shortname": "456CDE", + "mode": "cableCar", + "is_enabled": true, + "is_frozen": false, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "lines": [ + { + "id": "1234-1234", + "agency_id": "2345-2345", + "internal_id": "internalId", + "is_enabled": true, + "is_frozen": true, + "color": "#FFAAFF", + "shortname": "23A", + "longname": "LineLongname", + "mode": "rail", + "category": "B", + "description": "testDescription", + "is_autonomous": false, + "allow_same_line_transfers": true, + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "agency_id": "4567-4567", + "shortname": "123ABC", + "mode": "bus", + "internal_id": null, + "is_enabled": null, + "is_frozen": null, + "color": null, + "longname": null, + "category": null, + "description": null, + "is_autonomous": null, + "allow_same_line_transfers": null, + "data": {} + }, + { + "id": "3456-3456", + "agency_id": "5678-5678", + "shortname": "456CDE", + "mode": "cableCar", + "is_enabled": true, + "is_frozen": false, + "internal_id": null, + "color": null, + "longname": null, + "category": null, + "description": null, + "is_autonomous": null, + "allow_same_line_transfers": null, + "data": {} + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/lines", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "lines", + "lines", + &config, + &routers::line_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "lines", + "lines", + &config, + &routers::line_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["lines"], json_compare_data["lines"]); + + } +} + + + + + + +/* + +capnp_data.set_geography(&crate::utils::string_or_null_to_empty_string(&json_data["geography"].to_string())); + +*/ \ No newline at end of file diff --git a/services/json2capnp/src/routers/line_router.rs b/services/json2capnp/src/routers/line_router.rs new file mode 100644 index 000000000..d314b9087 --- /dev/null +++ b/services/json2capnp/src/routers/line_router.rs @@ -0,0 +1,748 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::line_capnp::{line}; +//use crate::my_error::MyError; +use std::fs::File; +use std::path::Path; +//use std::fs; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + json_value_or_null_to_i64_or_minus_one, + json_value_or_null_to_f64_or_minus_one, + minus_one_i64_to_null, + minus_one_f64_to_null, + time_str_to_seconds_since_midnight, + seconds_since_midnight_to_time_str +}; + +pub fn write_object( + cache_directory_path: &str, + json: &serde_json::Value, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + + let mut message = ::capnp::message::Builder::new_default(); + + let json_object = &json["line"]; + let object_uuid = match json_object.get("id") { + Some(json_object_id) => { + json_object_id.as_str().unwrap() + }, + // TODO: deal with empty or invalid uuids here with custom error: + None => { + "" + } + }; + + // TODO: deal with empty or invalid uuids here with custom error: + /*if (object_uuid == "") + { + Err(MyError::new("line uuid is invalid or empty")) + }*/ + + let object_file_path_name = format!("{}/line_{}.capnpbin", cache_directory_path, object_uuid); + let path = Path::new(&object_file_path_name); + + let file_check = File::create(&path); + + let file = file_check.unwrap(); + + /* TODO: deal with error when creating object file using uuid */ + + let mut capnp_data = message.init_root::(); + + capnp_data.set_uuid(&required_string(json_object.get("id"))); + capnp_data.set_agency_uuid(&required_string(json_object.get("agency_id"))); + capnp_data.set_shortname(&optional_string(json_object.get("shortname"))); + capnp_data.set_longname(&optional_string(json_object.get("longname"))); + capnp_data.set_internal_id(&optional_string(json_object.get("internal_id"))); + capnp_data.set_category(&optional_string(json_object.get("category"))); + capnp_data.set_mode(&optional_string(json_object.get("mode"))); + capnp_data.set_color(&optional_string(json_object.get("color"))); + capnp_data.set_description(&optional_string(json_object.get("description"))); + capnp_data.set_data(&json_object.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_object.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(json_object.get("is_enabled").unwrap_or(&json!(null)))); + capnp_data.set_is_autonomous(json_boolean_to_i8(json_object.get("is_autonomous").unwrap_or(&json!(null)))); + capnp_data.set_allow_same_line_transfers(json_boolean_to_i8(json_object.get("allow_same_line_transfers").unwrap_or(&json!(null)))); + + let schedules_json : std::collections::HashMap = serde_json::from_str(&json_object.get("scheduleByServiceId").unwrap_or(&json!({})).to_string().as_str()).unwrap(); + let count_schedules : usize = schedules_json.keys().len(); + + let mut capnp_schedules = capnp_data.reborrow().init_schedules(count_schedules as u32); + + let mut i : u32 = 0; + for (_ /* service_id */, json_data) in &schedules_json + { + + let mut capnp_schedule_data = capnp_schedules.reborrow().get(i as u32); + + capnp_schedule_data.set_uuid(&required_string(json_data.get("id"))); + capnp_schedule_data.set_service_uuid(&required_string(json_data.get("service_id"))); + capnp_schedule_data.set_periods_group_shortname(&optional_string(json_data.get("periods_group_shortname"))); + capnp_schedule_data.set_allow_seconds_based_schedules(json_boolean_to_i8(json_data.get("allow_seconds_based_schedules").unwrap_or(&json!(null)))); + capnp_schedule_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + + let count_periods: usize = json_data["periods"].as_array().unwrap().len(); + let mut capnp_periods = capnp_schedule_data.init_periods(count_periods as u32); + let periods_json = &json_data["periods"]; + + for j in 0..count_periods + { + let json_data = &periods_json[j]; + let mut capnp_period_data = capnp_periods.reborrow().get(j as u32); + let mut custom_start_at_seconds : i32 = -1; + let custom_start_at_str = json_data.get("custom_start_at_str").unwrap_or(&json!(null)); + if !custom_start_at_str.is_null() + { + let custom_start_at_seconds_option = time_str_to_seconds_since_midnight(custom_start_at_str.as_str().unwrap()); + if custom_start_at_seconds_option != None { + custom_start_at_seconds = custom_start_at_seconds_option.unwrap() as i32; + } + } + let mut custom_end_at_seconds : i32 = -1; + let custom_end_at_str = json_data.get("custom_end_at_str").unwrap_or(&json!(null)); + if !custom_end_at_str.is_null() + { + let custom_end_at_seconds_option = time_str_to_seconds_since_midnight(custom_end_at_str.as_str().unwrap()); + if custom_end_at_seconds_option != None { + custom_end_at_seconds = custom_end_at_seconds_option.unwrap() as i32; + } + } + + capnp_period_data.set_period_shortname(&optional_string(json_data.get("period_shortname"))); + capnp_period_data.set_outbound_path_uuid(&optional_string(json_data.get("outbound_path_id"))); + capnp_period_data.set_inbound_path_uuid(&optional_string(json_data.get("inbound_path_id"))); + capnp_period_data.set_custom_start_at_seconds(custom_start_at_seconds); + capnp_period_data.set_custom_end_at_seconds(custom_end_at_seconds); + capnp_period_data.set_start_at_seconds((json_value_or_null_to_f64_or_minus_one(&json_data.get("start_at_hour").unwrap()) * 3600.0) as i32); + capnp_period_data.set_end_at_seconds((json_value_or_null_to_f64_or_minus_one(&json_data.get("end_at_hour").unwrap()) * 3600.0) as i32); + capnp_period_data.set_interval_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("interval_seconds").unwrap_or(&json!(null))) as i16); + capnp_period_data.set_number_of_units(json_value_or_null_to_i64_or_minus_one(&json_data.get("number_of_units").unwrap_or(&json!(null))) as i16); + capnp_period_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_period_data.set_uuid(&optional_string(json_data.get("id"))); // period.id is required in the db. However, in the genetic algorithm, we don't need it. + + let count_trips: usize = json_data.get("trips").unwrap_or(&json!([])).as_array().unwrap().len(); + let mut capnp_trips = capnp_period_data.init_trips(count_trips as u32); + let trips_json = &json_data["trips"]; + + for k in 0..count_trips + { + let json_data = &trips_json[k]; + let mut capnp_trip_data = capnp_trips.reborrow().get(k as u32); + + capnp_trip_data.set_uuid(&required_string(json_data.get("id"))); + capnp_trip_data.set_path_uuid(&required_string(json_data.get("path_id"))); + capnp_trip_data.set_departure_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("departure_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_trip_data.set_arrival_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("arrival_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_trip_data.set_block_uuid(&optional_string(json_data.get("block_id"))); + capnp_trip_data.set_total_capacity(json_value_or_null_to_i64_or_minus_one(&json_data.get("total_capacity").unwrap_or(&json!(null))) as i16); + capnp_trip_data.set_seated_capacity(json_value_or_null_to_i64_or_minus_one(&json_data.get("seated_capacity").unwrap_or(&json!(null))) as i16); + capnp_trip_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + + let nodes_arrival_time_seconds = json_data.get("node_arrival_times_seconds").unwrap().as_array(); + if nodes_arrival_time_seconds != None { + let nodes_arrival_time_seconds = nodes_arrival_time_seconds.unwrap(); + let nodes_count: usize = nodes_arrival_time_seconds.len(); + + capnp_trip_data.reborrow().init_node_arrival_times_seconds(nodes_count as u32); + for l in 0..nodes_count + { + capnp_trip_data.reborrow().get_node_arrival_times_seconds().unwrap().set(l as u32, json_value_or_null_to_i64_or_minus_one(&nodes_arrival_time_seconds[l]) as i32); + } + } + else + { + capnp_trip_data.reborrow().init_node_arrival_times_seconds(0); + } + + let nodes_departure_time_seconds = json_data.get("node_departure_times_seconds").unwrap().as_array(); + if nodes_departure_time_seconds != None { + let nodes_departure_time_seconds = nodes_departure_time_seconds.unwrap(); + let nodes_count: usize = nodes_departure_time_seconds.len(); + + capnp_trip_data.reborrow().init_node_departure_times_seconds(nodes_count as u32); + for l in 0..nodes_count + { + capnp_trip_data.reborrow().get_node_departure_times_seconds().unwrap().set(l as u32, json_value_or_null_to_i64_or_minus_one(&nodes_departure_time_seconds[l]) as i32); + } + } + else + { + capnp_trip_data.reborrow().init_node_departure_times_seconds(0); + } + + let nodes_can_board = json_data.get("nodes_can_board").unwrap().as_array(); + if nodes_can_board != None { + let nodes_can_board = nodes_can_board.unwrap(); + let nodes_count: usize = nodes_can_board.len(); + + capnp_trip_data.reborrow().init_nodes_can_board(nodes_count as u32); + for l in 0..nodes_count + { + capnp_trip_data.reborrow().get_nodes_can_board().unwrap().set(l as u32, crate::utils::json_boolean_to_i8(&nodes_can_board[l])); + } + } + else + { + capnp_trip_data.reborrow().init_nodes_can_board(0); + } + + let nodes_can_unboard = json_data.get("nodes_can_unboard").unwrap().as_array(); + if nodes_can_unboard != None { + let nodes_can_unboard = nodes_can_unboard.unwrap(); + let nodes_count: usize = nodes_can_unboard.len(); + + capnp_trip_data.reborrow().init_nodes_can_unboard(nodes_count as u32); + for l in 0..nodes_count + { + capnp_trip_data.reborrow().get_nodes_can_unboard().unwrap().set(l as u32, crate::utils::json_boolean_to_i8(&nodes_can_unboard[l])); + } + } + else + { + capnp_trip_data.reborrow().init_nodes_can_unboard(0); + } + + } + + } + i += 1; + + } + + serialize_packed::write_message(file, &message) + +} + + +pub fn read_object( + object_uuid: &String, + cache_directory_path: &str, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let object_file_path_name = format!("{}/line_{}.capnpbin", cache_directory_path, object_uuid); + let path = Path::new(&object_file_path_name); + let file = File::open(&path); + + let file = match file { + Ok(f) => f, + Err(e) => { + println!("Error opening line file {}: {}", object_file_path_name, e); + return Err(capnp::Error::failed(String::from("Cannot read line file"))); + } + }; + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_object = message_reader.get_root::()?; + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let mut schedules : serde_json::Value = json!({}); + + if capnp_object.has_schedules() + { + for schedule in capnp_object.get_schedules()?.iter() { + + let mut schedule_json : serde_json::Value = json!({ + "id": schedule.get_uuid()?, + "service_id": schedule.get_service_uuid()?, + "periods_group_shortname": empty_str_to_json_null(schedule.get_periods_group_shortname()?), + "allow_seconds_based_schedules": i8_to_json_boolean(schedule.get_allow_seconds_based_schedules()), + "is_frozen": i8_to_json_boolean(schedule.get_is_frozen()), + "line_id": capnp_object.get_uuid()? + }); + + if schedule.has_periods() + { + let mut periods : Vec = Vec::with_capacity(schedule.get_periods()?.len() as usize); + for period in schedule.get_periods()?.iter() { + + let mut custom_start_at_str = String::from(""); + if period.get_custom_start_at_seconds() >= 0 + { + let custom_start_at_seconds = period.get_custom_start_at_seconds() as u32; + custom_start_at_str = seconds_since_midnight_to_time_str(&custom_start_at_seconds); + } + + let mut custom_end_at_str = String::from(""); + if period.get_custom_end_at_seconds() >= 0 + { + let custom_end_at_seconds = period.get_custom_end_at_seconds() as u32; + custom_end_at_str = seconds_since_midnight_to_time_str(&custom_end_at_seconds); + } + + let mut period_json : serde_json::Value = json!({ + "period_shortname": empty_str_to_json_null(period.get_period_shortname()?), + "outbound_path_id": empty_str_to_json_null(period.get_outbound_path_uuid()?), + "inbound_path_id": empty_str_to_json_null(period.get_inbound_path_uuid()?), + "custom_start_at_str": empty_str_to_json_null(custom_start_at_str.as_str()), + "custom_end_at_str": empty_str_to_json_null(custom_end_at_str.as_str()), + "start_at_hour": minus_one_f64_to_null(period.get_start_at_seconds() as f64 / 3600.0), + "end_at_hour": minus_one_f64_to_null(period.get_end_at_seconds() as f64 / 3600.0), + "interval_seconds": minus_one_i64_to_null(period.get_interval_seconds() as i64), + "number_of_units": minus_one_i64_to_null(period.get_number_of_units() as i64), + "is_frozen": i8_to_json_boolean(period.get_is_frozen()), + "id": empty_str_to_json_null(period.get_uuid()?), + "schedule_id": schedule.get_uuid()? + }); + + if period.has_trips() + { + let mut trips : Vec = Vec::with_capacity(period.get_trips()?.len() as usize); + for trip in period.get_trips()?.iter() { + let mut trip_json : serde_json::Value = json!({ + "id": trip.get_uuid()?, + "path_id": trip.get_path_uuid()?, + "departure_time_seconds": minus_one_i64_to_null(trip.get_departure_time_seconds() as i64), + "arrival_time_seconds": minus_one_i64_to_null(trip.get_arrival_time_seconds() as i64), + "block_id": empty_str_to_json_null(trip.get_block_uuid()?), + "total_capacity": minus_one_i64_to_null(trip.get_total_capacity() as i64), + "seated_capacity": minus_one_i64_to_null(trip.get_seated_capacity() as i64), + "is_frozen": i8_to_json_boolean(period.get_is_frozen()), + "schedule_id": empty_str_to_json_null(schedule.get_uuid()?), + "schedule_period_id": empty_str_to_json_null(period.get_uuid()?) + }); + + if trip.has_node_arrival_times_seconds() + { + let mut node_arrival_times_seconds : Vec = Vec::with_capacity(trip.get_node_arrival_times_seconds()?.len() as usize); + for node_arrival_time_seconds in trip.get_node_arrival_times_seconds()?.iter() { + node_arrival_times_seconds.push(json!(minus_one_i64_to_null(node_arrival_time_seconds as i64))); + } + trip_json["node_arrival_times_seconds"] = json!(node_arrival_times_seconds); + } + if trip.has_node_departure_times_seconds() + { + let mut node_departure_times_seconds : Vec = Vec::with_capacity(trip.get_node_departure_times_seconds()?.len() as usize); + for node_departure_time_seconds in trip.get_node_departure_times_seconds()?.iter() { + node_departure_times_seconds.push(json!(minus_one_i64_to_null(node_departure_time_seconds as i64))); + } + trip_json["node_departure_times_seconds"] = json!(node_departure_times_seconds); + } + if trip.has_nodes_can_board() + { + let mut nodes_can_board : Vec = Vec::with_capacity(trip.get_nodes_can_board()?.len() as usize); + for node_can_board in trip.get_nodes_can_board()?.iter() { + nodes_can_board.push(json!(i8_to_json_boolean(node_can_board))); + } + trip_json["nodes_can_board"] = json!(nodes_can_board); + } + if trip.has_nodes_can_unboard() + { + let mut nodes_can_unboard : Vec = Vec::with_capacity(trip.get_nodes_can_unboard()?.len() as usize); + for node_can_unboard in trip.get_nodes_can_unboard()?.iter() { + nodes_can_unboard.push(json!(i8_to_json_boolean(node_can_unboard))); + } + trip_json["nodes_can_unboard"] = json!(nodes_can_unboard); + } + + trips.push(trip_json); + } + period_json["trips"] = json!(trips); + } + + periods.push(period_json); + } + schedule_json["periods"] = json!(periods); + } + + schedules[schedule.get_service_uuid().unwrap()] = schedule_json; + } + + } + + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "agency_id": capnp_object.get_agency_uuid()?, + "shortname": capnp_object.get_shortname()?, + "longname": empty_str_to_json_null(capnp_object.get_longname()?), + "category": empty_str_to_json_null(capnp_object.get_category()?), + "mode": capnp_object.get_mode()?, + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "is_autonomous": i8_to_json_boolean(capnp_object.get_is_autonomous()), + "allow_same_line_transfers": i8_to_json_boolean(capnp_object.get_allow_same_line_transfers()), + "data": data_attributes, + "scheduleByServiceId": schedules + }); + + let output_json = json!({ + "line": object_json + }); + + Ok(output_json) + +} + + +#[cfg(test)] +mod tests { + + use pretty_assertions::{assert_eq}; + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + + #[test] + fn line() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "line": { + "id": "bddc12af-6c9f-4048-a800-a79ee187401d", + "internal_id": "Demo", + "mode": "bus", + "category": "C", + "agency_id": "f4f2043b-11cb-42ab-8711-c8da071b27d5", + "shortname": "A", + "longname": "A", + "color": "#ff0000", + "is_enabled": true, + "description": null, + "data": { + "isNew": false, + "deadHeadTravelTimesBetweenPathsByPathId": { + "cb01fe06-e450-4e6d-991c-a6e843cf30db": { + "cb01fe06-e450-4e6d-991c-a6e843cf30db": 506, + "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b":0 + }, + "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b": { + "cb01fe06-e450-4e6d-991c-a6e843cf30db": 0, + "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b": 501 + } + }, + "_pathsChangeTimestamp": 1608137820125 + }, + "created_at": "2020-12-16T16:55:18.963Z", + "updated_at": "2020-12-16T17:01:40.545Z", + "is_autonomous": false, + "allow_same_line_transfers": false, + "is_frozen": null, + "path_ids": ["cb01fe06-e450-4e6d-991c-a6e843cf30db","e39e0b59-9af4-4cc0-ae7e-84f01e293f0b"], + "scheduleByServiceId": { + "a52a2402-9510-4c46-a0a9-f58930355c10": { + "id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "service_id": "a52a2402-9510-4c46-a0a9-f58930355c10", + "periods_group_shortname": "default", + "allow_seconds_based_schedules": false, + "is_frozen": null, + "periods": [ + { + "id": "bddc12af-6c9f-4048-a800-a79ee187aaaa", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "period_shortname": "morning", + "outbound_path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "inbound_path_id": "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "custom_start_at_str": "06:02:45", + "custom_end_at_str": "15:00", + "start_at_hour": 4, + "end_at_hour": 6, + "interval_seconds": null, + "number_of_units": 2, + "trips": [ + { + "id": "6650ebc1-75c8-4ae6-abef-ce4dbc1c3a5f", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "schedule_period_id": "bddc12af-6c9f-4048-a800-a79ee187aaaa", + "path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "departure_time_seconds": 14400, + "arrival_time_seconds": 15272, + "node_arrival_times_seconds": [null,14446,14517,14595,14650,14698,14798,14894,15005,15074,15193,15272], + "node_departure_times_seconds": [14400,14466,14537,14615,14670,14718,14818,14914,15025,15094,15213,null], + "nodes_can_board": [true,true,true,true,true,false,true,true,true,true,true,false], + "nodes_can_unboard": [false,true,true,true,true,true,true,false,true,true,true,true], + "block_id": null, + "total_capacity": 50, + "seated_capacity": 20 + }, + { + "id": "dd1eec4b-4b88-4d75-82b0-2005707fc0bf", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "schedule_period_id": "bddc12af-6c9f-4048-a800-a79ee187aaaa", + "path_id": "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "departure_time_seconds": 14413, + "arrival_time_seconds": 15267, + "node_arrival_times_seconds": [null,14471,14579,14661,14772,14854,14950,14997,15052,15142,15201,15267], + "node_departure_times_seconds": [14413,14491,14599,14681,14792,14874,14970,15017,15072,15162,15221,null], + "nodes_can_board": [true,true,true,true,true,true,true,true,true,true,true,false], + "nodes_can_unboard": [false,true,true,true,true,true,true,true,true,true,true,true], + "block_id": null, + "total_capacity": 50, + "seated_capacity": 20 + } + ] + }, + { + "id": "bddc12af-6c9f-4048-a800-a79ee18bbbbb", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "period_shortname": "am_peak", + "outbound_path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "inbound_path_id":"e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "custom_start_at_str": "28:45", + "start_at_hour": 6, + "end_at_hour": 9.5, + "interval_seconds": 900, + "number_of_units": null, + "trips": [ + { + "id":"a1f5fbc9-f692-49f3-a00f-430e5075c25f", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "schedule_period_id": "bddc12af-6c9f-4048-a800-a79ee18bbbbb", + "path_id":"cb01fe06-e450-4e6d-991c-a6e843cf30db", + "departure_time_seconds": 21600, + "arrival_time_seconds": 22472, + "node_arrival_times_seconds": [null,21646,21717,21795,21850,21898,21998,22094,22205,22274,22393,22472], + "node_departure_times_seconds": [21600,21666,21737,21815,21870,21918,22018,22114,22225,22294,22413,null], + "nodes_can_board": [true,true,true,true,true,true,true,true,true,true,true,false], + "nodes_can_unboard": [false,true,true,true,true,true,true,true,true,true,true,true], + "block_id": null, + "total_capacity": 50, + "seated_capacity":20 + } + ] + }, + { + "id": "bddc12af-6c9f-4048-a800-a79ee187cccc", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "period_shortname": "night", + "outbound_path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "inbound_path_id": "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "custom_start_at_str": null, + "start_at_hour": 23, + "end_at_hour": 28, + "interval_seconds": null, + "number_of_units": null, + "trips": [] + } + ], + "data": { + "isNew": false + } + } + } + } + } + "##; + + let compare_data = r##" + { + "line": { + "id": "bddc12af-6c9f-4048-a800-a79ee187401d", + "internal_id": "Demo", + "mode": "bus", + "category": "C", + "agency_id": "f4f2043b-11cb-42ab-8711-c8da071b27d5", + "shortname": "A", + "longname": "A", + "color": "#ff0000", + "is_enabled": true, + "description": null, + "data": { + "isNew": false, + "deadHeadTravelTimesBetweenPathsByPathId": { + "cb01fe06-e450-4e6d-991c-a6e843cf30db": { + "cb01fe06-e450-4e6d-991c-a6e843cf30db": 506, + "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b":0 + }, + "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b": { + "cb01fe06-e450-4e6d-991c-a6e843cf30db": 0, + "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b": 501 + } + }, + "_pathsChangeTimestamp": 1608137820125 + }, + "is_autonomous": false, + "allow_same_line_transfers": false, + "is_frozen": null, + "scheduleByServiceId": { + "a52a2402-9510-4c46-a0a9-f58930355c10": { + "id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "line_id": "bddc12af-6c9f-4048-a800-a79ee187401d", + "service_id": "a52a2402-9510-4c46-a0a9-f58930355c10", + "periods_group_shortname": "default", + "allow_seconds_based_schedules": false, + "is_frozen": null, + "periods": [ + { + "id": "bddc12af-6c9f-4048-a800-a79ee187aaaa", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "period_shortname": "morning", + "outbound_path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "inbound_path_id": "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "custom_start_at_str": "06:02:45", + "custom_end_at_str": "15:00", + "start_at_hour": 4.0, + "end_at_hour": 6.0, + "interval_seconds": null, + "number_of_units": 2, + "is_frozen": null, + "trips": [ + { + "id": "6650ebc1-75c8-4ae6-abef-ce4dbc1c3a5f", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "schedule_period_id": "bddc12af-6c9f-4048-a800-a79ee187aaaa", + "path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "departure_time_seconds": 14400, + "arrival_time_seconds": 15272, + "node_arrival_times_seconds": [null,14446,14517,14595,14650,14698,14798,14894,15005,15074,15193,15272], + "node_departure_times_seconds": [14400,14466,14537,14615,14670,14718,14818,14914,15025,15094,15213,null], + "nodes_can_board": [true,true,true,true,true,false,true,true,true,true,true,false], + "nodes_can_unboard": [false,true,true,true,true,true,true,false,true,true,true,true], + "block_id": null, + "total_capacity": 50, + "seated_capacity": 20, + "is_frozen": null + }, + { + "id": "dd1eec4b-4b88-4d75-82b0-2005707fc0bf", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "schedule_period_id": "bddc12af-6c9f-4048-a800-a79ee187aaaa", + "path_id": "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "departure_time_seconds": 14413, + "arrival_time_seconds": 15267, + "node_arrival_times_seconds": [null,14471,14579,14661,14772,14854,14950,14997,15052,15142,15201,15267], + "node_departure_times_seconds": [14413,14491,14599,14681,14792,14874,14970,15017,15072,15162,15221,null], + "nodes_can_board": [true,true,true,true,true,true,true,true,true,true,true,false], + "nodes_can_unboard": [false,true,true,true,true,true,true,true,true,true,true,true], + "block_id": null, + "total_capacity": 50, + "seated_capacity": 20, + "is_frozen": null + } + ] + }, + { + "id": "bddc12af-6c9f-4048-a800-a79ee18bbbbb", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "period_shortname": "am_peak", + "outbound_path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "inbound_path_id":"e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "custom_start_at_str": "28:45", + "custom_end_at_str": null, + "start_at_hour": 6.0, + "end_at_hour": 9.5, + "interval_seconds": 900, + "number_of_units": null, + "is_frozen": null, + "trips": [ + { + "id":"a1f5fbc9-f692-49f3-a00f-430e5075c25f", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "schedule_period_id": "bddc12af-6c9f-4048-a800-a79ee18bbbbb", + "path_id":"cb01fe06-e450-4e6d-991c-a6e843cf30db", + "departure_time_seconds": 21600, + "arrival_time_seconds": 22472, + "node_arrival_times_seconds": [null,21646,21717,21795,21850,21898,21998,22094,22205,22274,22393,22472], + "node_departure_times_seconds": [21600,21666,21737,21815,21870,21918,22018,22114,22225,22294,22413,null], + "nodes_can_board": [true,true,true,true,true,true,true,true,true,true,true,false], + "nodes_can_unboard": [false,true,true,true,true,true,true,true,true,true,true,true], + "block_id": null, + "total_capacity": 50, + "seated_capacity":20, + "is_frozen": null + } + ] + }, + { + "id": "bddc12af-6c9f-4048-a800-a79ee187cccc", + "schedule_id": "d36f377c-6691-4f70-8c0f-3f35d6958314", + "period_shortname": "night", + "outbound_path_id": "cb01fe06-e450-4e6d-991c-a6e843cf30db", + "inbound_path_id": "e39e0b59-9af4-4cc0-ae7e-84f01e293f0b", + "custom_start_at_str": null, + "custom_end_at_str": null, + "start_at_hour": 23.0, + "end_at_hour": 28.0, + "interval_seconds": null, + "number_of_units": null, + "trips": [], + "is_frozen": null + } + ] + } + } + } + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/line", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_object_route( + "line", + "lines", + &config, + &routers::line_router::write_object, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_object_route( + "line", + &String::from("bddc12af-6c9f-4048-a800-a79ee187401d"), + "lines", + &config, + &routers::line_router::read_object, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["line"], json_compare_data["line"]); + + // Test non-existing line + let response = routers::read_object_route( + "line", + &String::from("bddc12af-6c9f-4048-a800-aaaaaaaaaaaa"), + "lines", + &config, + &routers::line_router::read_object, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + // TODO Return code should be 404 Not found + assert_eq!(response.status_code, 200); + assert!(json_response["data"].is_null()); + + } +} \ No newline at end of file diff --git a/services/json2capnp/src/routers/mod.rs b/services/json2capnp/src/routers/mod.rs new file mode 100644 index 000000000..e41b4af44 --- /dev/null +++ b/services/json2capnp/src/routers/mod.rs @@ -0,0 +1,309 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use rouille; +use serde_json::json; +use std::error::Error; +use std::fs::File; +use std::path::Path; +use std::fs; + +pub mod od_trip_collection_router; +pub mod node_router; +pub mod node_collection_router; +pub mod line_router; +pub mod line_collection_router; +pub mod person_collection_router; +pub mod household_collection_router; +pub mod data_source_collection_router; +pub mod agency_collection_router; +pub mod path_collection_router; +pub mod place_collection_router; +pub mod garage_collection_router; +pub mod unit_collection_router; +pub mod service_collection_router; +pub mod scenario_collection_router; +pub mod zone_collection_router; + +pub mod taxi_point_collection_router; + +fn failed_response(cache_name: &str, error: &dyn Error) -> rouille::Response { + + let json = json!({ + "status" : "fail", + "cacheName": cache_name, + "error" : error.to_string() + }); + + let data = serde_json::to_string(&json).unwrap(); + + rouille::Response { + status_code: 200, + headers : vec![("Content-Type".into(), "application/json; charset=utf-8".into())], + data : rouille::ResponseBody::from_data(data), + upgrade : None + } + +} + +fn success_response(cache_name: &str, json_data: Option<&serde_json::Value>) -> rouille::Response { + + let mut json = json!({ + "status" : "success", + "cacheName": cache_name + }); + + match json_data { + Some(json_value) => { + json["data"] = json_value.clone(); + } + + _ => () + } + + rouille::Response { + status_code: 200, + headers : vec![("Content-Type".into(), "application/json; charset=utf-8".into())], + data : rouille::ResponseBody::from_string(json.to_string()), + upgrade : None + } + +} + +pub fn write_collection_route(collection_name: &str, cache_file_name: &str, config: &serde_json::Value, write_fn: &dyn Fn(&serde_json::Value, &mut std::fs::File, &serde_json::Value) -> ::std::result::Result<(), capnp::Error>, request: &rouille::Request) -> rouille::Response { + + let json : serde_json::Value = try_or_400!(rouille::input::json_input(request)); + let json_cache_directory_path = json.get("cache_directory_path").unwrap_or(&serde_json::Value::Null); + let json_data_source_uuid = json.get("data_source_uuid").unwrap_or(&serde_json::Value::Null); + + let cache_directory_path; + + if json_cache_directory_path.is_null() // no custom path + { + if !json_data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}", config["project_cache_directory_path"].as_str().unwrap(), json_data_source_uuid.as_str().unwrap()); + } + else + { + cache_directory_path = format!("{}", config["project_cache_directory_path"].as_str().unwrap()); + } + println!("cache_directory_path: {}", cache_directory_path); + } + else + { + if !json_data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}/{}", config["project_cache_directory_path"].as_str().unwrap(), json_data_source_uuid.as_str().unwrap(), json_cache_directory_path.as_str().unwrap(), ); + } + else + { + cache_directory_path = format!("{}/{}", config["project_cache_directory_path"].as_str().unwrap(), json_cache_directory_path.as_str().unwrap()); + } + println!("cache_directory_path_custom: {}", cache_directory_path); + } + + + let directory_path = Path::new(&cache_directory_path); + let absolute_directory_path = String::from(directory_path.to_str().unwrap()); + let create_directories = fs::create_dir_all(&absolute_directory_path); + match create_directories { + Ok(()) => {}, + Err(error) => { + println!("{}", error); + } + } + + let collection_file_path_name; + + if cache_file_name == "households" || cache_file_name == "persons" || cache_file_name == "odTrips" { + collection_file_path_name = format!("{}/{}.capnpbin", absolute_directory_path, cache_file_name); + println!("{}", collection_file_path_name); + } else { + collection_file_path_name = format!("{}/{}.capnpbin", absolute_directory_path, cache_file_name); + } + let absolute_path = Path::new(&collection_file_path_name); + //println!("collection_file_path_name: {}", collection_file_path_name); + let file = File::create(&absolute_path); + + if file.is_ok() + { + match &write_fn(&json, &mut file.unwrap(), config) { + Err(error) => return failed_response(collection_name, error), + Ok(()) => return success_response(collection_name, None) + } + } + else + { + failed_response(collection_name, &file.unwrap_err()) + } + +} + +pub fn read_collection_route(collection_name: &str, cache_file_name: &str, config: &serde_json::Value, read_fn: &dyn Fn(&mut std::fs::File, &serde_json::Value) -> ::std::result::Result) -> rouille::Response { + + let custom_subdirectory_path = config.get("custom_subdirectory_path").unwrap_or(&serde_json::Value::Null); + let data_source_uuid = config.get("data_source_uuid").unwrap_or(&serde_json::Value::Null); + + let cache_directory_path; + + if custom_subdirectory_path.is_null() // no custom path + { + if !data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}", config["project_cache_directory_path"].as_str().unwrap(), data_source_uuid.as_str().unwrap()); + } + else + { + cache_directory_path = format!("{}", config["project_cache_directory_path"].as_str().unwrap()); + } + //println!("cache_directory_path: {}", cache_directory_path); + } + else + { + if !data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}/{}", config["project_cache_directory_path"].as_str().unwrap(), data_source_uuid.as_str().unwrap(), custom_subdirectory_path.as_str().unwrap()); + } + else + { + cache_directory_path = format!("{}/{}", config["project_cache_directory_path"].as_str().unwrap(), custom_subdirectory_path.as_str().unwrap()); + } + //println!("cache_directory_path_custom: {}", cache_directory_path); + } + + + let directory_path = Path::new(&cache_directory_path); + let absolute_directory_path = String::from(directory_path.to_str().unwrap()); + let create_directories = fs::create_dir_all(&absolute_directory_path); + match create_directories { + Ok(()) => {}, + Err(error) => { + println!("{}", error); + } + } + + let collection_file_path_name; + if cache_file_name == "households" || cache_file_name == "persons" || cache_file_name == "odTrips" { + collection_file_path_name = format!("{}/{}.capnpbin", absolute_directory_path, cache_file_name); + } else { + collection_file_path_name = format!("{}/{}.capnpbin", absolute_directory_path, cache_file_name); + } + let path = Path::new(&collection_file_path_name); + //println!("collection_file_path_name: {}", collection_file_path_name); + let absolute_path = String::from(path.to_str().unwrap()); + let file = File::open(&absolute_path); + + if file.is_ok() + { + match &read_fn(&mut file.unwrap(), config) { + Err(error) => return failed_response(collection_name, error), + Ok(json_value) => return success_response(collection_name, Some(&json_value)) + } + } + else + { + failed_response(collection_name, &file.unwrap_err()) + } + +} + + +pub fn write_object_route(collection_name: &str, subdirectory: &str, config: &serde_json::Value, write_fn: &dyn Fn(&str, &serde_json::Value, &serde_json::Value) -> ::std::result::Result<(), capnp::Error>, request: &rouille::Request) -> rouille::Response { + + let json : serde_json::Value = try_or_400!(rouille::input::json_input(request)); + let json_cache_directory_path = json.get("cache_directory_path").unwrap_or(&serde_json::Value::Null); + let json_data_source_uuid = json.get("data_source_uuid").unwrap_or(&serde_json::Value::Null); + + let cache_directory_path; + + if json_cache_directory_path.is_null() // no custom path + { + if !json_data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}/{}", config["project_cache_directory_path"].as_str().unwrap(), json_data_source_uuid.as_str().unwrap(), subdirectory); + } + else + { + cache_directory_path = format!("{}/{}", config["project_cache_directory_path"].as_str().unwrap(), subdirectory); + } + //println!("cache_directory_path: {}", cache_directory_path); + } + else + { + if !json_data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}/{}", config["project_cache_directory_path"].as_str().unwrap(), json_data_source_uuid.as_str().unwrap(), json_cache_directory_path.as_str().unwrap(), ); + } + else + { + cache_directory_path = format!("{}/{}", config["project_cache_directory_path"].as_str().unwrap(), json_cache_directory_path.as_str().unwrap()); + } + //println!("cache_directory_path_custom: {}", cache_directory_path); + } + + let path = Path::new(&cache_directory_path); + let create_directories = fs::create_dir_all(&path); + match create_directories { + Ok(()) => {}, + Err(error) => { + println!("{}", error); + } + } + + let absolute_path = String::from(path.to_str().unwrap()); + match &write_fn(&absolute_path.as_str(), &json, config) { + Err(error) => return failed_response(collection_name, error), + Ok(()) => return success_response(collection_name, None) + } + +} + +pub fn read_object_route(object_name: &str, object_uuid: &String, subdirectory: &str, config: &serde_json::Value, read_fn: &dyn Fn(&String, &str, &serde_json::Value) -> ::std::result::Result) -> rouille::Response { + + let custom_subdirectory_path = config.get("custom_subdirectory_path").unwrap_or(&serde_json::Value::Null); + let data_source_uuid = config.get("data_source_uuid").unwrap_or(&serde_json::Value::Null); + + let cache_directory_path; + + + if custom_subdirectory_path.is_null() // no custom path + { + if !data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}/{}", config["project_cache_directory_path"].as_str().unwrap(), data_source_uuid.as_str().unwrap(), subdirectory); + } + else + { + cache_directory_path = format!("{}/{}", config["project_cache_directory_path"].as_str().unwrap(), subdirectory); + } + //println!("cache_directory_path: {}", cache_directory_path); + } + else + { + if !data_source_uuid.is_null() + { + cache_directory_path = format!("{}/dataSources/{}/{}", config["project_cache_directory_path"].as_str().unwrap(), data_source_uuid.as_str().unwrap(), custom_subdirectory_path.as_str().unwrap()); + } + else + { + cache_directory_path = format!("{}/{}", config["project_cache_directory_path"].as_str().unwrap(), custom_subdirectory_path.as_str().unwrap()); + } + //println!("cache_directory_path_custom: {}", cache_directory_path); + } + + let path = Path::new(&cache_directory_path); + let absolute_path = String::from(path.to_str().unwrap()); + println!("absolute_path: {}", absolute_path); + + match &read_fn(object_uuid, &absolute_path.as_str(), config) { + Err(error) => return failed_response(object_name, error), + Ok(json_value) => return success_response(object_name, Some(&json_value)) + } + +} \ No newline at end of file diff --git a/services/json2capnp/src/routers/node_collection_router.rs b/services/json2capnp/src/routers/node_collection_router.rs new file mode 100644 index 000000000..0c80efe39 --- /dev/null +++ b/services/json2capnp/src/routers/node_collection_router.rs @@ -0,0 +1,368 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::nodeCollection_capnp::node_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::GeoJson; +use geojson::{Value as GeojsonValue}; + +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + json_value_or_null_to_i64_or_minus_one, + minus_one_i64_to_null +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let geojson_data : GeoJson = GeoJson::from_json_value((json["nodes"]).clone()).unwrap(); + + match geojson_data { + geojson::GeoJson::FeatureCollection(feature_collection) => { + + let features_count = feature_collection.features.len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_nodes(features_count as u32); + for i in 0..features_count { + let feature = &feature_collection.features[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + let mut properties = feature.properties.clone().unwrap(); + + let geojson_value = feature.geometry.to_owned().unwrap().value; + let latitude; + let longitude; + match geojson_value { + GeojsonValue::Point(point) => { + longitude = (point[0] * 1000000.0).round() as i32; + latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + longitude = -1; + latitude = -1; + } + } + + capnp_data.set_uuid(&required_string(properties.get("id"))); // required + capnp_data.set_id(properties.get("integer_id").unwrap().as_u64().unwrap() as u32); // required + capnp_data.set_station_uuid(optional_string(properties.get("station_id"))); + capnp_data.set_internal_id(optional_string(properties.get("internal_id"))); + capnp_data.set_code(optional_string(properties.get("code"))); + capnp_data.set_name(optional_string(properties.get("name"))); + capnp_data.set_color(optional_string(properties.get("color"))); + capnp_data.set_description(optional_string(properties.get("description"))); + capnp_data.set_routing_radius_meters(json_value_or_null_to_i64_or_minus_one(&properties.get("routing_radius_meters").unwrap_or(&json!(null))) as i16); + capnp_data.set_default_dwell_time_seconds(json_value_or_null_to_i64_or_minus_one(&properties.get("default_dwell_time_seconds").unwrap_or(&json!(null))) as i16); + + if properties.get("data") != None && properties["data"].is_object() && properties["data"].get("transferableNodes") != None && properties["data"]["transferableNodes"].is_object() // remove transferable nodes data from collection + { + properties["data"]["transferableNodes"].take(); + } + + capnp_data.set_data(&properties.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(&properties.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(&properties.get("is_enabled").unwrap_or(&json!(null)))); + capnp_data.set_latitude(latitude); + capnp_data.set_longitude(longitude); + + } + serialize_packed::write_message(file, &message) + }, + _ => { + Err(capnp::Error::failed(String::from("Nodes geojson is invalid, empty or not a FeatureCollection"))) + } + } + +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_nodes()?.len() as usize); + + for capnp_object in capnp_collection.get_nodes()?.iter() { + + let integer_id = capnp_object.get_id() as u32; + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let latitude = (capnp_object.get_latitude() as f64)/1000000.0; + let longitude = (capnp_object.get_longitude() as f64)/1000000.0; + let properties_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": integer_id, + "station_id": empty_str_to_json_null(capnp_object.get_station_uuid()?), + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "code": empty_str_to_json_null(capnp_object.get_code()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "routing_radius_meters": minus_one_i64_to_null(capnp_object.get_routing_radius_meters() as i64), + "default_dwell_time_seconds": minus_one_i64_to_null(capnp_object.get_default_dwell_time_seconds() as i64), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "data": data_attributes + }); + + let mut geojson = json!({ + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [longitude, latitude] + } + }); + + geojson["id"] = json!(integer_id); + geojson["properties"] = properties_json; + + collection_json_vec.push(geojson); + + } + + Ok(json!({ + "nodes": { + "type": "FeatureCollection", + "features": serde_json::Value::Array(collection_json_vec) + } + })) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn node_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "nodes": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 456, + "properties": { + "id": "915923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "foo": "bar" + }, + "station_id": "715923f9-a768-49e5-81b6-8237d60a6125", + "code": "034A", + "name": "NodeName", + "color": "#1A2F3D", + "is_frozen": false, + "created_at": "2020-01-01T15:15:15.054321-04:00", + "integer_id": 456, + "is_enabled": true, + "updated_at": null, + "description": "description for node", + "internal_id": "N98765", + "routing_radius_meters": 212, + "default_dwell_time_seconds": 18 + } + } + ] + } + } + "##; + + let compare_data = r##" + { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 456, + "properties": { + "id": "915923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "foo": "bar" + }, + "station_id": "715923f9-a768-49e5-81b6-8237d60a6125", + "code": "034A", + "name": "NodeName", + "color": "#1A2F3D", + "is_frozen": false, + "integer_id": 456, + "is_enabled": true, + "description": "description for node", + "internal_id": "N98765", + "routing_radius_meters": 212, + "default_dwell_time_seconds": 18 + } + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/nodes", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "nodes", + "nodes", + &config, + &routers::node_collection_router::write_collection, + &request, + ); + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "nodes", + "nodes", + &config, + &routers::node_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["nodes"], json_compare_data); + + + + + + let data = r##" + { + "nodes": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 456, + "properties": { + "id": "915923f9-a768-49e5-81b6-8237d60a6125", + "integer_id": 456 + } + } + ] + } + } + "##; + + let compare_data = r##" + { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 456, + "properties": { + "id": "915923f9-a768-49e5-81b6-8237d60a6125", + "data": {}, + "station_id": null, + "code": null, + "name": null, + "color": null, + "is_frozen": null, + "integer_id": 456, + "is_enabled": null, + "description": null, + "internal_id": null, + "routing_radius_meters": null, + "default_dwell_time_seconds": null + } + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/nodes", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "nodes", + "nodes", + &config, + &routers::node_collection_router::write_collection, + &request, + ); + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "nodes", + "nodes", + &config, + &routers::node_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["nodes"], json_compare_data); + + } +} \ No newline at end of file diff --git a/services/json2capnp/src/routers/node_router.rs b/services/json2capnp/src/routers/node_router.rs new file mode 100644 index 000000000..b03512b02 --- /dev/null +++ b/services/json2capnp/src/routers/node_router.rs @@ -0,0 +1,343 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::node_capnp::{node}; +//use crate::my_error::MyError; +use std::fs::File; +use std::path::Path; +//use std::fs; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::{Value as GeojsonValue}; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + json_value_or_null_to_i64_or_minus_one, + minus_one_i64_to_null +}; + +pub fn write_object( + cache_directory_path: &str, + json: &serde_json::Value, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + + let mut message = ::capnp::message::Builder::new_default(); + + let mut json_object = json["node"].clone(); + let object_uuid = match json_object.get("id") { + Some(json_object_id) => { + json_object_id.as_str().unwrap() + }, + // TODO: deal with empty or invalid uuids here with custom error: + None => { + "" + } + }; + + // TODO: deal with empty or invalid uuids here with custom error: + /*if (object_uuid == "") + { + Err(MyError::new("node uuid is invalid or empty")) + }*/ + + let object_file_path_name = format!("{}/node_{}.capnpbin", cache_directory_path, object_uuid); + let path = Path::new(&object_file_path_name); + + let file_check = File::create(&path); + + let file = file_check.unwrap(); + + /* TODO: deal with error when creating object file using uuid */ + + let mut capnp_data = message.init_root::(); + + let geometry = geojson::Geometry::from_json_value(json_object["geography"].clone()); + let geojson_value = geometry.unwrap().value; + + let latitude; + let longitude; + match geojson_value { + GeojsonValue::Point(point) => { + longitude = (point[0] * 1000000.0).round() as i32; + latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + longitude = -1; + latitude = -1; + } + } + + capnp_data.set_uuid(&required_string(json_object.get("id"))); // required + capnp_data.set_station_uuid(optional_string(json_object.get("station_id"))); + capnp_data.set_internal_id(optional_string(json_object.get("internal_id"))); + capnp_data.set_code(optional_string(json_object.get("code"))); + capnp_data.set_name(optional_string(json_object.get("name"))); + capnp_data.set_color(optional_string(json_object.get("color"))); + capnp_data.set_description(optional_string(json_object.get("description"))); + capnp_data.set_routing_radius_meters(json_value_or_null_to_i64_or_minus_one(&json_object.get("routing_radius_meters").unwrap_or(&json!(null))) as i16); + capnp_data.set_default_dwell_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_object.get("default_dwell_time_seconds").unwrap_or(&json!(null))) as i16); + capnp_data.set_data(&json_object.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(&json_object.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(&json_object.get("is_enabled").unwrap_or(&json!(null)))); + capnp_data.set_latitude(latitude); + capnp_data.set_longitude(longitude); + + if !json_object.get("integer_id").unwrap_or(&json!(null)).is_null() { // only save transferable node if the node has an integer id, otherwise, we get null indexes + capnp_data.set_id(json_object.get("integer_id").unwrap().as_u64().unwrap() as u32); // required + + if json_object.get("data") != None && json_object["data"].is_object() && json_object["data"].get("transferableNodes") != None && json_object["data"]["transferableNodes"].is_object() && json_object["data"]["transferableNodes"].get("nodesIds") != None && json_object["data"]["transferableNodes"]["nodesIds"].is_array() + { + let transferable_nodes_count = json_object["data"]["transferableNodes"]["nodesIds"].as_array().unwrap().len(); + capnp_data.reborrow().init_transferable_nodes_uuids(transferable_nodes_count as u32); + capnp_data.reborrow().init_transferable_nodes_travel_times(transferable_nodes_count as u32); + capnp_data.reborrow().init_transferable_nodes_distances(transferable_nodes_count as u32); + + for j in 0..transferable_nodes_count + { + capnp_data.reborrow().get_transferable_nodes_uuids().unwrap().set(j as u32, json_object["data"]["transferableNodes"]["nodesIds"][j].as_str().unwrap()); + capnp_data.reborrow().get_transferable_nodes_travel_times().unwrap().set(j as u32, json_object["data"]["transferableNodes"]["walkingTravelTimesSeconds"][j].as_i64().unwrap_or(-1) as i16); + capnp_data.reborrow().get_transferable_nodes_distances().unwrap().set(j as u32, json_object["data"]["transferableNodes"]["walkingDistancesMeters"][j].as_i64().unwrap_or(-1) as i16); + } + + // remove transferableNodes and associates: + json_object["data"]["transferableNodes"]["nodesIds"].take(); + json_object["data"]["transferableNodes"]["walkingTravelTimesSeconds"].take(); + json_object["data"]["transferableNodes"]["walkingDistancesMeters"].take(); + } + } + + serialize_packed::write_message(file, &message) + +} + + +pub fn read_object( + object_uuid: &String, + cache_directory_path: &str, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let object_file_path_name = format!("{}/node_{}.capnpbin", cache_directory_path, object_uuid); + let path = Path::new(&object_file_path_name); + let file = File::open(&path); + + let file = match file { + Ok(f) => f, + Err(e) => { + println!("Error opening node file {}: {}", object_file_path_name, e); + return Err(capnp::Error::failed(String::from("Cannot read node file"))); + } + }; + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_object = message_reader.get_root::()?; + + let integer_id = capnp_object.get_id() as u32; + let mut data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let latitude = (capnp_object.get_latitude() as f64)/1000000.0; + let longitude = (capnp_object.get_longitude() as f64)/1000000.0; + + if capnp_object.has_transferable_nodes_uuids() + { + data_attributes["transferableNodes"] = json!({ + "nodesIds": [], + "walkingTravelTimesSeconds": [], + "walkingDistancesMeters": [] + }); + let mut transferable_nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_transferable_nodes_uuids()?.len() as usize); + for transferable_node_uuid in capnp_object.get_transferable_nodes_uuids()?.iter() { + transferable_nodes_uuids.push(json!(transferable_node_uuid.unwrap())); + } + data_attributes["transferableNodes"]["nodesIds"] = json!(transferable_nodes_uuids); + + let mut transferable_nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_transferable_nodes_travel_times()?.len() as usize); + for transferable_node_travel_time in capnp_object.get_transferable_nodes_travel_times()?.iter() { + transferable_nodes_travel_times.push(json!(transferable_node_travel_time)); + } + data_attributes["transferableNodes"]["walkingTravelTimesSeconds"] = json!(transferable_nodes_travel_times); + + let mut transferable_nodes_distances : Vec = Vec::with_capacity(capnp_object.get_transferable_nodes_distances()?.len() as usize); + for transferable_node_distance in capnp_object.get_transferable_nodes_distances()?.iter() { + transferable_nodes_distances.push(json!(transferable_node_distance)); + } + data_attributes["transferableNodes"]["walkingDistancesMeters"] = json!(transferable_nodes_distances); + } + + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": integer_id, + "station_id": empty_str_to_json_null(capnp_object.get_station_uuid()?), + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "code": empty_str_to_json_null(capnp_object.get_code()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "routing_radius_meters": minus_one_i64_to_null(capnp_object.get_routing_radius_meters() as i64), + "default_dwell_time_seconds": minus_one_i64_to_null(capnp_object.get_default_dwell_time_seconds() as i64), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "geography": { + "type": "Point", + "coordinates": [longitude, latitude] + }, + "data": data_attributes + }); + + let output_json = json!({ + "node": object_json + }); + + Ok(output_json) + +} + + +#[cfg(test)] +mod tests { + + use pretty_assertions::{assert_eq}; + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + + #[test] + fn node() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "node": { + "id": "cddc12af-6c9f-4048-a800-a79ee187401d", + "internal_id": "Stop internal id", + "integer_id": 77, + "name": "Stop name", + "code": "Stop code", + "color": "#ffff00", + "is_enabled": true, + "description": null, + "station_id": null, + "geography": { + "type": "Point", + "coordinates": [-73.70, 45.40] + }, + "data": { + "isNew": false, + "transferableNodes": { + "nodesIds": ["addc12af-6c9f-4048-a800-a79ee187401d","bddc12af-6c9f-4048-a800-a79ee187401d","dddc12af-6c9f-4048-a800-a79ee187401d","eddc12af-6c9f-4048-a800-a79ee187401d"], + "walkingTravelTimesSeconds": [234,233,555,0], + "walkingDistancesMeters": [444,555,666,0] + } + }, + "created_at": "2020-12-16T16:55:18.963Z", + "updated_at": "2020-12-16T17:01:40.545Z", + "routing_radius_meters": 50, + "default_dwell_time_seconds": 25, + "is_frozen": null + } + } + "##; + + let compare_data = r##" + { + "node": { + "id": "cddc12af-6c9f-4048-a800-a79ee187401d", + "internal_id": "Stop internal id", + "integer_id": 77, + "name": "Stop name", + "code": "Stop code", + "color": "#ffff00", + "is_enabled": true, + "description": null, + "station_id": null, + "geography": { + "type": "Point", + "coordinates": [-73.70, 45.40] + }, + "data": { + "isNew": false, + "transferableNodes": { + "nodesIds": ["addc12af-6c9f-4048-a800-a79ee187401d","bddc12af-6c9f-4048-a800-a79ee187401d","dddc12af-6c9f-4048-a800-a79ee187401d","eddc12af-6c9f-4048-a800-a79ee187401d"], + "walkingTravelTimesSeconds": [234,233,555,0], + "walkingDistancesMeters": [444,555,666,0] + } + }, + "routing_radius_meters": 50, + "default_dwell_time_seconds": 25, + "is_frozen": null + } + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/node", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_object_route( + "node", + "nodes", + &config, + &routers::node_router::write_object, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_object_route( + "node", + &String::from("cddc12af-6c9f-4048-a800-a79ee187401d"), + "nodes", + &config, + &routers::node_router::read_object, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["node"], json_compare_data["node"]); + + // Test unexisting node + let response = routers::read_object_route( + "node", + &String::from("cddc12af-6c9f-4048-a800-aaaaaaaaaaaa"), + "nodes", + &config, + &routers::node_router::read_object, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + // TODO Response code should be 404 not found + assert_eq!(response.status_code, 200); + assert!(json_response["data"].is_null()); + + } +} \ No newline at end of file diff --git a/services/json2capnp/src/routers/od_trip_collection_router.rs b/services/json2capnp/src/routers/od_trip_collection_router.rs new file mode 100644 index 000000000..0e3397f5d --- /dev/null +++ b/services/json2capnp/src/routers/od_trip_collection_router.rs @@ -0,0 +1,424 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::odTripCollection_capnp::od_trip_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::{Value as GeojsonValue}; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + minus_one_i64_to_null, + minus_one_f64_to_null, + json_value_or_null_to_i64_or_minus_one, + json_value_or_null_to_f64_or_minus_one +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["odTrips"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_od_trips(count as u32); + + for i in 0..count { + let mut json_data = json_objects[i].clone(); + + let origin_geometry = geojson::Geometry::from_json_value(json_data["origin_geography"].clone()); + let origin_geojson_value = origin_geometry.unwrap().value; + let origin_latitude; + let origin_longitude; + match origin_geojson_value { + GeojsonValue::Point(point) => { + origin_longitude = (point[0] * 1000000.0).round() as i32; + origin_latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + origin_longitude = -1; + origin_latitude = -1; + } + } + + let destination_geometry = geojson::Geometry::from_json_value(json_data["destination_geography"].clone()); + let destination_geojson_value = destination_geometry.unwrap().value; + let destination_latitude; + let destination_longitude; + match destination_geojson_value { + GeojsonValue::Point(point) => { + destination_longitude = (point[0] * 1000000.0).round() as i32; + destination_latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + destination_longitude = -1; + destination_latitude = -1; + } + } + + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_person_uuid(&optional_string(json_data.get("person_id"))); + capnp_data.set_household_uuid(&optional_string(json_data.get("household_id"))); + capnp_data.set_data_source_uuid(&optional_string(json_data.get("data_source_id"))); + capnp_data.set_id(json_data.get("integer_id").unwrap().as_u64().unwrap() as u32); // required + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_expansion_factor(json_value_or_null_to_f64_or_minus_one(&json_data.get("expansion_factor").unwrap_or(&json!(null))) as f32); + capnp_data.set_departure_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("departure_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_arrival_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("arrival_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_walking_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("walking_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_cycling_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("cycling_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_driving_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("driving_travel_time_seconds").unwrap_or(&json!(null))) as i32); + + capnp_data.set_mode(crate::enum_mappings::mode(&json_data["mode"].as_str().unwrap_or("none"))); + capnp_data.set_origin_activity(crate::enum_mappings::activity(&json_data["origin_activity"].as_str().unwrap_or("none"))); + capnp_data.set_destination_activity(crate::enum_mappings::activity(&json_data["destination_activity"].as_str().unwrap_or("none"))); + capnp_data.set_origin_latitude(origin_latitude); + capnp_data.set_origin_longitude(origin_longitude); + capnp_data.set_destination_latitude(destination_latitude); + capnp_data.set_destination_longitude(destination_longitude); + + if json_data.get("data") != None && json_data["data"].is_object() && json_data["data"].get("originNodes") != None && json_data["data"]["originNodes"].is_array() + { + let nodes_count = json_data["data"]["originNodes"].as_array().unwrap().len(); + capnp_data.reborrow().init_origin_nodes_uuids(nodes_count as u32); + capnp_data.reborrow().init_origin_nodes_travel_times(nodes_count as u32); + capnp_data.reborrow().init_origin_nodes_distances(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_origin_nodes_uuids().unwrap().set(j as u32, json_data["data"]["originNodes"][j].as_str().unwrap()); + capnp_data.reborrow().get_origin_nodes_travel_times().unwrap().set(j as u32, json_data["data"]["originNodesTravelTimes"][j].as_i64().unwrap() as i16); + capnp_data.reborrow().get_origin_nodes_distances().unwrap().set(j as u32, json_data["data"]["originNodesDistances"][j].as_i64().unwrap() as i16); + } + + // remove originNodes and associates: + json_data["data"]["originNodes"].take(); + json_data["data"]["originNodesTravelTimes"].take(); + json_data["data"]["originNodesDistances"].take(); + } + + if json_data.get("data") != None && json_data["data"].is_object() && json_data["data"].get("destinationNodes") != None && json_data["data"]["destinationNodes"].is_array() + { + let nodes_count = json_data["data"]["destinationNodes"].as_array().unwrap().len(); + capnp_data.reborrow().init_destination_nodes_uuids(nodes_count as u32); + capnp_data.reborrow().init_destination_nodes_travel_times(nodes_count as u32); + capnp_data.reborrow().init_destination_nodes_distances(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_destination_nodes_uuids().unwrap().set(j as u32, json_data["data"]["destinationNodes"][j].as_str().unwrap()); + capnp_data.reborrow().get_destination_nodes_travel_times().unwrap().set(j as u32, json_data["data"]["destinationNodesTravelTimes"][j].as_i64().unwrap() as i16); + capnp_data.reborrow().get_destination_nodes_distances().unwrap().set(j as u32, json_data["data"]["destinationNodesDistances"][j].as_i64().unwrap() as i16); + } + + // remove destinationNodes and associates: + json_data["data"]["destinationNodes"].take(); + json_data["data"]["destinationNodesTravelTimes"].take(); + json_data["data"]["destinationNodesDistances"].take(); + } + + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_od_trips()?.len() as usize); + + for capnp_object in capnp_collection.get_od_trips()?.iter() { + + let mut data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let origin_latitude = (capnp_object.get_origin_latitude() as f64)/1000000.0; + let origin_longitude = (capnp_object.get_origin_longitude() as f64)/1000000.0; + let destination_latitude = (capnp_object.get_destination_latitude() as f64)/1000000.0; + let destination_longitude = (capnp_object.get_destination_longitude() as f64)/1000000.0; + + if capnp_object.has_origin_nodes_uuids() + { + let mut origin_nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_origin_nodes_uuids()?.len() as usize); + for origin_node_uuid in capnp_object.get_origin_nodes_uuids()?.iter() { + origin_nodes_uuids.push(json!(origin_node_uuid.unwrap())); + } + data_attributes["originNodes"] = json!(origin_nodes_uuids); + + let mut origin_nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_origin_nodes_travel_times()?.len() as usize); + for origin_node_travel_time in capnp_object.get_origin_nodes_travel_times()?.iter() { + origin_nodes_travel_times.push(json!(origin_node_travel_time)); + } + data_attributes["originNodesTravelTimes"] = json!(origin_nodes_travel_times); + + let mut origin_nodes_distances : Vec = Vec::with_capacity(capnp_object.get_origin_nodes_distances()?.len() as usize); + for origin_node_distance in capnp_object.get_origin_nodes_distances()?.iter() { + origin_nodes_distances.push(json!(origin_node_distance)); + } + data_attributes["originNodesDistances"] = json!(origin_nodes_distances); + } + + if capnp_object.has_destination_nodes_uuids() + { + let mut destination_nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_destination_nodes_uuids()?.len() as usize); + for destination_node_uuid in capnp_object.get_destination_nodes_uuids()?.iter() { + destination_nodes_uuids.push(json!(destination_node_uuid.unwrap())); + } + data_attributes["destinationNodes"] = json!(destination_nodes_uuids); + + let mut destination_nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_destination_nodes_travel_times()?.len() as usize); + for destination_node_travel_time in capnp_object.get_destination_nodes_travel_times()?.iter() { + destination_nodes_travel_times.push(json!(destination_node_travel_time)); + } + data_attributes["destinationNodesTravelTimes"] = json!(destination_nodes_travel_times); + + let mut destination_nodes_distances : Vec = Vec::with_capacity(capnp_object.get_destination_nodes_distances()?.len() as usize); + for destination_node_distance in capnp_object.get_destination_nodes_distances()?.iter() { + destination_nodes_distances.push(json!(destination_node_distance)); + } + data_attributes["destinationNodesDistances"] = json!(destination_nodes_distances); + } + + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": capnp_object.get_id(), + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "person_id": empty_str_to_json_null(capnp_object.get_person_uuid()?), + "household_id": empty_str_to_json_null(capnp_object.get_household_uuid()?), + "data_source_id": empty_str_to_json_null(capnp_object.get_data_source_uuid()?), + "mode": crate::enum_mappings::mode_to_str(&capnp_object.get_mode()?), + "origin_activity": crate::enum_mappings::activity_to_str(&capnp_object.get_origin_activity()?), + "destination_activity": crate::enum_mappings::activity_to_str(&capnp_object.get_destination_activity()?), + "expansion_factor": minus_one_f64_to_null(((capnp_object.get_expansion_factor() as f64)*100000.0).round() / 100000.0), // we must round to 5 decimals so we don't get numbers like 2.10000000345454 for n input value of 2.1 + "departure_time_seconds": minus_one_i64_to_null(capnp_object.get_departure_time_seconds() as i64), + "arrival_time_seconds": minus_one_i64_to_null(capnp_object.get_arrival_time_seconds() as i64), + "walking_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_walking_travel_time_seconds() as i64), + "cycling_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_cycling_travel_time_seconds() as i64), + "driving_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_driving_travel_time_seconds() as i64), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "data": data_attributes, + "origin_geography": { + "type": "Point", + "coordinates": [origin_longitude, origin_latitude] + }, + "destination_geography": { + "type": "Point", + "coordinates": [destination_longitude, destination_latitude] + } + }); + + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "odTrips": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn od_trip_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test", + "data_source_uuid" : "1234-5678" + }); + + let data = r##" + { + "data_source_uuid": "1234-5678", + "odTrips": [ + { + "id": "1234-1234", + "integer_id": 23, + "is_frozen": true, + "internal_id": "h21", + "data_source_id": "4567-8910", + "person_id": "123-456", + "household_id": "8910-4567", + "departure_time_seconds": 54412, + "arrival_time_seconds": 54612, + "origin_activity": "workUsual", + "destination_activity": "home", + "mode": "transit", + "expansion_factor": 23.1, + "walking_travel_time_seconds": 2345, + "cycling_travel_time_seconds": 1234, + "driving_travel_time_seconds": 988, + "origin_geography": { + "type": "Point", + "coordinates": [-73.45, 45.47] + }, + "destination_geography": { + "type": "Point", + "coordinates": [-73.100115, 45.102445] + }, + "data": { + "foo": "bar", + "originNodes": ["abc", "def", "efg"], + "originNodesTravelTimes": [234, 567, 8910], + "originNodesDistances": [1243, 3453, 9455], + "destinationNodes": ["bbc", "eef", "ffg"], + "destinationNodesTravelTimes": [891, 781, 681], + "destinationNodesDistances": [466, 566, 666] + } + }, + { + "integer_id": 24, + "id": "2345-2345", + "is_frozen": null, + "origin_geography": { + "type": "Point", + "coordinates": [-73.20, 45.20] + }, + "destination_geography": { + "type": "Point", + "coordinates": [-73, 46] + } + } + ] + } + "##; + + let compare_data = r##" + { + "odTrips": [ + { + "id": "1234-1234", + "integer_id": 23, + "is_frozen": true, + "internal_id": "h21", + "data_source_id": "4567-8910", + "person_id": "123-456", + "household_id": "8910-4567", + "departure_time_seconds": 54412, + "arrival_time_seconds": 54612, + "origin_activity": "workUsual", + "destination_activity": "home", + "mode": "transit", + "expansion_factor": 23.1, + "walking_travel_time_seconds": 2345, + "cycling_travel_time_seconds": 1234, + "driving_travel_time_seconds": 988, + "origin_geography": { + "type": "Point", + "coordinates": [-73.45, 45.47] + }, + "destination_geography": { + "type": "Point", + "coordinates": [-73.100115, 45.102445] + }, + "data": { + "foo": "bar", + "originNodes": ["abc", "def", "efg"], + "originNodesTravelTimes": [234, 567, 8910], + "originNodesDistances": [1243, 3453, 9455], + "destinationNodes": ["bbc", "eef", "ffg"], + "destinationNodesTravelTimes": [891, 781, 681], + "destinationNodesDistances": [466, 566, 666] + } + }, + { + "id": "2345-2345", + "is_frozen": null, + "internal_id": null, + "integer_id": 24, + "data_source_id": null, + "data": {}, + "person_id": null, + "household_id": null, + "departure_time_seconds": null, + "arrival_time_seconds": null, + "origin_activity": "none", + "destination_activity": "none", + "mode": "none", + "expansion_factor": null, + "walking_travel_time_seconds": null, + "cycling_travel_time_seconds": null, + "driving_travel_time_seconds": null, + "origin_geography": { + "type": "Point", + "coordinates": [-73.20, 45.20] + }, + "destination_geography": { + "type": "Point", + "coordinates": [-73.0, 46.0] + } + + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/odTrips", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "odTrips", + "odTrips", + &config, + &routers::od_trip_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "odTrips", + "odTrips", + &config, + &routers::od_trip_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["odTrips"], json_compare_data["odTrips"]); + + } +} diff --git a/services/json2capnp/src/routers/path_collection_router.rs b/services/json2capnp/src/routers/path_collection_router.rs new file mode 100644 index 000000000..1a1dd70c9 --- /dev/null +++ b/services/json2capnp/src/routers/path_collection_router.rs @@ -0,0 +1,421 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::pathCollection_capnp::path_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::GeoJson; +use geobuf; +use protobuf::Message; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let geojson_data : GeoJson = GeoJson::from_json_value((json["paths"]).clone()).unwrap(); + + match geojson_data { + geojson::GeoJson::FeatureCollection(feature_collection) => { + + let features_count = feature_collection.features.len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_paths(features_count as u32); + for i in 0..features_count { + let feature = &feature_collection.features[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + let properties = feature.properties.as_ref().unwrap(); + println!("path_id {}", properties.get("id").unwrap().as_str().unwrap()); + capnp_data.set_uuid(properties.get("id").unwrap().as_str().unwrap()); // required + capnp_data.set_id(properties.get("integer_id").unwrap().as_i64().unwrap() as i32); // required + capnp_data.set_line_uuid(properties.get("line_id").unwrap().as_str().unwrap()); // required + capnp_data.set_direction(&crate::utils::json_null_to_empty_str(&properties.get("direction").unwrap_or(&json!(null)))); + capnp_data.set_name(&crate::utils::json_null_to_empty_str(&properties.get("name").unwrap_or(&json!(null)))); + capnp_data.set_internal_id(&crate::utils::json_null_to_empty_str(&properties.get("internal_id").unwrap_or(&json!(null)))); + capnp_data.set_description(&crate::utils::json_null_to_empty_str(&properties.get("description").unwrap_or(&json!(null)))); + capnp_data.set_data(&properties.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(crate::utils::json_boolean_to_i8(&properties.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(crate::utils::json_boolean_to_i8(&properties.get("is_enabled").unwrap_or(&json!(null)))); + + if properties.get("nodes") != None + { + let nodes_optional = properties.get("nodes").unwrap().as_array(); + let nodes = nodes_optional.unwrap(); + let nodes_count: usize = nodes.len(); + + capnp_data.reborrow().init_nodes_uuids(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_nodes_uuids().unwrap().set(j as u32, nodes[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_nodes_uuids(0); + } + + if properties.get("stops") != None + { + let stops_optional = properties.get("stops").unwrap().as_array(); + let stops = stops_optional.unwrap(); + let stops_count: usize = stops.len(); + capnp_data.reborrow().init_stops_uuids(stops_count as u32); + for j in 0..stops_count + { + capnp_data.reborrow().get_stops_uuids().unwrap().set(j as u32, stops[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_stops_uuids(0); + } + + if properties.get("segments") != None + { + let segments_optional = properties.get("segments").unwrap().as_array(); + let segments = segments_optional.unwrap(); + let segments_count: usize = segments.len(); + capnp_data.reborrow().init_segments(segments_count as u32); + for j in 0..segments_count + { + capnp_data.reborrow().get_segments().unwrap().set(j as u32, segments[j].as_i64().unwrap() as i32); + } + } + else + { + capnp_data.reborrow().init_segments(0); + } + + let geojson_json = json!({ + "type": "Feature", + "properties": {}, + "geometry": feature.geometry.as_ref().unwrap() + }); + let geobuf = geobuf::encode::Encoder::encode(&geojson_json, 6, 2).unwrap().write_to_bytes().unwrap(); + + capnp_data.set_geography(&geobuf); + //capnp_data.set_geography(&geojson_json["geometry"].to_string().as_str()); + + } + serialize_packed::write_message(file, &message) + }, + _ => { + Err(capnp::Error::failed(String::from("Paths geojson is invalid, empty or not a FeatureCollection"))) + } + } + +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_paths()?.len() as usize); + + for capnp_object in capnp_collection.get_paths()?.iter() { + + let integer_id = capnp_object.get_id() as i32; + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let mut properties_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": integer_id, + "line_id": capnp_object.get_line_uuid()?, + "internal_id": crate::utils::empty_str_to_json_null(capnp_object.get_internal_id()?), + "direction": crate::utils::empty_str_to_json_null(capnp_object.get_direction()?), + "name": crate::utils::empty_str_to_json_null(capnp_object.get_name()?), + "description": crate::utils::empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": crate::utils::i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": crate::utils::i8_to_json_boolean(capnp_object.get_is_enabled()), + "data": data_attributes + }); + + let mut nodes_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_nodes_uuids()?.len() as usize); + for node_uuid in capnp_object.get_nodes_uuids()?.iter() { + nodes_uuids_vec.push(json!(node_uuid.unwrap())); + } + properties_json["nodes"] = json!(nodes_uuids_vec); + + let mut stops_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_stops_uuids()?.len() as usize); + for stop_uuid in capnp_object.get_stops_uuids()?.iter() { + stops_uuids_vec.push(json!(stop_uuid.unwrap())); + } + properties_json["stops"] = json!(stops_uuids_vec); + + let mut segments_vec : Vec = Vec::with_capacity(capnp_object.get_segments()?.len() as usize); + for segment in capnp_object.get_segments()?.iter() { + segments_vec.push(json!(segment)); + } + properties_json["segments"] = json!(segments_vec); + + let mut geobuf_data = geobuf::geobuf_pb::Data::new(); + + geobuf_data.merge_from_bytes(&capnp_object.get_geography().unwrap()).unwrap(); + let mut geojson : serde_json::Value = geobuf::decode::Decoder::decode(&geobuf_data).unwrap_or(json!({ + "geometry": null + })); + + geojson["id"] = json!(integer_id); + geojson["properties"] = properties_json; + + collection_json_vec.push(geojson); + + } + + Ok(json!({ + "paths": { + "type": "FeatureCollection", + "features": serde_json::Value::Array(collection_json_vec) + } + })) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn path_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "paths": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [-72.963302,45.639486], + [-72.962992,45.639276], + [-72.962526,45.639643], + [-72.962265,45.639492], + [-72.962158,45.639414], + [-72.961906,45.639259], + [-72.961848,45.639144], + [-72.961792,45.639055], + [-72.961789,45.639001], + [-72.97436,45.63308], + [-72.974538,45.633058], + [-72.974768,45.633033], + [-72.974984,45.633] + ] + }, + "id": 234, + "properties": { + "id": "515923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "gtfs": { + "shape_id": "A0000" + }, + "isNew": false, + "segments": [ + { + "distanceMeters": 1700, + "travelTimeSeconds": 120 + }, + { + "distanceMeters": 300, + "travelTimeSeconds": 60 + }, + { + "distanceMeters": 388, + "travelTimeSeconds": 0 + }, + { + "distanceMeters": 411, + "travelTimeSeconds": 60 + } + ], + "dwellTimeSeconds": [0,20,18,20,23], + "layoverTimeSeconds": 180, + "returnBackGeography": null, + "totalDistanceMeters": 6939, + "totalDwellTimeSeconds": 0, + "birdDistanceBetweenTerminals": 0, + "operatingSpeedMetersPerSecond": 8.9, + "travelTimeWithoutDwellTimesSeconds": 780, + "operatingTimeWithLayoverTimeSeconds": 960, + "totalTravelTimeWithReturnBackSeconds": null, + "operatingTimeWithoutLayoverTimeSeconds": 780, + "operatingSpeedWithLayoverMetersPerSecond": 7.23, + "averageSpeedWithoutDwellTimesMetersPerSecond": 8.9 + }, + "mode": "bus", + "name": "PathName", + "color": "#1F1F1F", + "nodes":[ + "02c36463-fca3-48dc-8722-c8d2cdf62ad1", + "073709b9-38de-4092-9010-0c636d4e7031", + "02d6f932-14ef-4405-97d6-fc1c6d55328c", + "07de5ccb-0c2b-4f83-aedb-2d7d4000a107", + "02f2a4a0-399f-4894-aaca-b687bcf00058" + ], + "line_id": "83269525-9100-45b3-b00b-67b5d5a3f12d", + "segments": [0,61,66,84], + "direction": "inbound", + "is_frozen": false, + "created_at": "2020-01-01T15:15:15.054321-04:00", + "integer_id": 234, + "is_enabled": true, + "updated_at": null, + "description": "description for path", + "internal_id": "A12345" + } + } + ] + } + } + "##; + + let compare_data = r##" + { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [-72.963302,45.639486], + [-72.962992,45.639276], + [-72.962526,45.639643], + [-72.962265,45.639492], + [-72.962158,45.639414], + [-72.961906,45.639259], + [-72.961848,45.639144], + [-72.961792,45.639055], + [-72.961789,45.639001], + [-72.97436,45.63308], + [-72.974538,45.633058], + [-72.974768,45.633033], + [-72.974984,45.633] + ] + }, + "id": 234, + "properties": { + "id": "515923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "gtfs": { + "shape_id": "A0000" + }, + "isNew": false, + "segments": [ + { + "distanceMeters": 1700, + "travelTimeSeconds": 120 + }, + { + "distanceMeters": 300, + "travelTimeSeconds": 60 + }, + { + "distanceMeters": 388, + "travelTimeSeconds": 0 + }, + { + "distanceMeters": 411, + "travelTimeSeconds": 60 + } + ], + "dwellTimeSeconds": [0,20,18,20,23], + "layoverTimeSeconds": 180, + "returnBackGeography": null, + "totalDistanceMeters": 6939, + "totalDwellTimeSeconds": 0, + "birdDistanceBetweenTerminals": 0, + "operatingSpeedMetersPerSecond": 8.9, + "travelTimeWithoutDwellTimesSeconds": 780, + "operatingTimeWithLayoverTimeSeconds": 960, + "totalTravelTimeWithReturnBackSeconds": null, + "operatingTimeWithoutLayoverTimeSeconds": 780, + "operatingSpeedWithLayoverMetersPerSecond": 7.23, + "averageSpeedWithoutDwellTimesMetersPerSecond": 8.9 + }, + "name": "PathName", + "stops": [], + "nodes":[ + "02c36463-fca3-48dc-8722-c8d2cdf62ad1", + "073709b9-38de-4092-9010-0c636d4e7031", + "02d6f932-14ef-4405-97d6-fc1c6d55328c", + "07de5ccb-0c2b-4f83-aedb-2d7d4000a107", + "02f2a4a0-399f-4894-aaca-b687bcf00058" + ], + "line_id": "83269525-9100-45b3-b00b-67b5d5a3f12d", + "segments": [0,61,66,84], + "direction": "inbound", + "is_frozen": false, + "integer_id": 234, + "is_enabled": true, + "description": "description for path", + "internal_id": "A12345" + } + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/paths", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "paths", + "paths", + &config, + &routers::path_collection_router::write_collection, + &request, + ); + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "paths", + "paths", + &config, + &routers::path_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["paths"], json_compare_data); + + } +} diff --git a/services/json2capnp/src/routers/person_collection_router.rs b/services/json2capnp/src/routers/person_collection_router.rs new file mode 100644 index 000000000..4fce79e20 --- /dev/null +++ b/services/json2capnp/src/routers/person_collection_router.rs @@ -0,0 +1,460 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::personCollection_capnp::person_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::{Value as GeojsonValue}; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + minus_one_i64_to_null, + minus_one_f64_to_null, + json_value_or_null_to_i64_or_minus_one, + json_value_or_null_to_f64_or_minus_one +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["persons"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_persons(count as u32); + + for i in 0..count { + let mut json_data = json_objects[i].clone(); + + let mut capnp_data = capnp.reborrow().get(i as u32); + + if !json_data.get("usual_work_place_geography").unwrap_or(&json!(null)).is_null() + { + let usual_work_place_geometry = geojson::Geometry::from_json_value(json_data["usual_work_place_geography"].clone()); + let usual_work_place_geojson_value = usual_work_place_geometry.unwrap().value; + let usual_work_place_latitude; + let usual_work_place_longitude; + match usual_work_place_geojson_value { + GeojsonValue::Point(point) => { + usual_work_place_longitude = (point[0] * 1000000.0).round() as i32; + usual_work_place_latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + usual_work_place_longitude = -1; + usual_work_place_latitude = -1; + } + } + capnp_data.set_usual_work_place_latitude(usual_work_place_latitude); + capnp_data.set_usual_work_place_longitude(usual_work_place_longitude); + } + else + { + capnp_data.set_usual_work_place_latitude(-1); + capnp_data.set_usual_work_place_longitude(-1); + } + + if !json_data.get("usual_school_place_geography").unwrap_or(&json!(null)).is_null() + { + let usual_school_place_geometry = geojson::Geometry::from_json_value(json_data["usual_school_place_geography"].clone()); + let usual_school_place_geojson_value = usual_school_place_geometry.unwrap().value; + let usual_school_place_latitude; + let usual_school_place_longitude; + match usual_school_place_geojson_value { + GeojsonValue::Point(point) => { + usual_school_place_longitude = (point[0] * 1000000.0).round() as i32; + usual_school_place_latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + usual_school_place_longitude = -1; + usual_school_place_latitude = -1; + } + } + capnp_data.set_usual_school_place_latitude(usual_school_place_latitude); + capnp_data.set_usual_school_place_longitude(usual_school_place_longitude); + } + else + { + capnp_data.set_usual_school_place_latitude(-1); + capnp_data.set_usual_school_place_longitude(-1); + } + + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_household_uuid(&optional_string(json_data.get("household_id"))); + capnp_data.set_data_source_uuid(&optional_string(json_data.get("data_source_id"))); + capnp_data.set_id(json_data.get("integer_id").unwrap().as_u64().unwrap() as u32); // required + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_expansion_factor(json_value_or_null_to_f64_or_minus_one(&json_data.get("expansion_factor").unwrap_or(&json!(null))) as f32); + capnp_data.set_age(json_value_or_null_to_i64_or_minus_one(&json_data.get("age").unwrap_or(&json!(null))) as i16); + capnp_data.set_driving_license_owner(json_boolean_to_i8(json_data.get("driving_license_owner").unwrap_or(&json!(null)))); + capnp_data.set_transit_pass_owner(json_boolean_to_i8(json_data.get("transit_pass_owner").unwrap_or(&json!(null)))); + capnp_data.set_occupation(crate::enum_mappings::occupation(&json_data["occupation"].as_str().unwrap_or("none"))); + capnp_data.set_gender(crate::enum_mappings::gender(&json_data["gender"].as_str().unwrap_or("none"))); + capnp_data.set_age_group(crate::enum_mappings::age_group(&json_data["age_group"].as_str().unwrap_or("none"))); + + capnp_data.set_usual_work_place_walking_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("usual_work_place_walking_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_usual_work_place_cycling_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("usual_work_place_cycling_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_usual_work_place_driving_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("usual_work_place_driving_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_usual_school_place_walking_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("usual_school_place_walking_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_usual_school_place_cycling_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("usual_school_place_cycling_travel_time_seconds").unwrap_or(&json!(null))) as i32); + capnp_data.set_usual_school_place_driving_travel_time_seconds(json_value_or_null_to_i64_or_minus_one(&json_data.get("usual_school_place_driving_travel_time_seconds").unwrap_or(&json!(null))) as i32); + + if json_data.get("data") != None && json_data["data"].is_object() && json_data["data"].get("usualWorkPlaceNodes") != None && json_data["data"]["usualWorkPlaceNodes"].is_array() + { + let nodes_count = json_data["data"]["usualWorkPlaceNodes"].as_array().unwrap().len(); + capnp_data.reborrow().init_usual_work_place_nodes_uuids(nodes_count as u32); + capnp_data.reborrow().init_usual_work_place_nodes_travel_times(nodes_count as u32); + capnp_data.reborrow().init_usual_work_place_nodes_distances(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_usual_work_place_nodes_uuids().unwrap().set(j as u32, json_data["data"]["usualWorkPlaceNodes"][j].as_str().unwrap()); + capnp_data.reborrow().get_usual_work_place_nodes_travel_times().unwrap().set(j as u32, json_data["data"]["usualWorkPlaceNodesTravelTimes"][j].as_i64().unwrap() as i16); + capnp_data.reborrow().get_usual_work_place_nodes_distances().unwrap().set(j as u32, json_data["data"]["usualWorkPlaceNodesDistances"][j].as_i64().unwrap() as i16); + } + + // remove usualWorkPlaceNodes and associates: + json_data["data"]["usualWorkPlaceNodes"].take(); + json_data["data"]["usualWorkPlaceNodesTravelTimes"].take(); + json_data["data"]["usualWorkPlaceNodesDistances"].take(); + } + + if json_data.get("data") != None && json_data["data"].is_object() && json_data["data"].get("usualSchoolPlaceNodes") != None && json_data["data"]["usualSchoolPlaceNodes"].is_array() + { + let nodes_count = json_data["data"]["usualSchoolPlaceNodes"].as_array().unwrap().len(); + capnp_data.reborrow().init_usual_school_place_nodes_uuids(nodes_count as u32); + capnp_data.reborrow().init_usual_school_place_nodes_travel_times(nodes_count as u32); + capnp_data.reborrow().init_usual_school_place_nodes_distances(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_usual_school_place_nodes_uuids().unwrap().set(j as u32, json_data["data"]["usualSchoolPlaceNodes"][j].as_str().unwrap()); + capnp_data.reborrow().get_usual_school_place_nodes_travel_times().unwrap().set(j as u32, json_data["data"]["usualSchoolPlaceNodesTravelTimes"][j].as_i64().unwrap() as i16); + capnp_data.reborrow().get_usual_school_place_nodes_distances().unwrap().set(j as u32, json_data["data"]["usualSchoolPlaceNodesDistances"][j].as_i64().unwrap() as i16); + } + + // remove usualSchoolPlaceNodes and associates: + json_data["data"]["usualSchoolPlaceNodes"].take(); + json_data["data"]["usualSchoolPlaceNodesTravelTimes"].take(); + json_data["data"]["usualSchoolPlaceNodesDistances"].take(); + } + + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_persons()?.len() as usize); + + for capnp_object in capnp_collection.get_persons()?.iter() { + + let mut data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + + if capnp_object.has_usual_work_place_nodes_uuids() + { + let mut usual_work_place_nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_usual_work_place_nodes_uuids()?.len() as usize); + for usual_work_place_node_uuid in capnp_object.get_usual_work_place_nodes_uuids()?.iter() { + usual_work_place_nodes_uuids.push(json!(usual_work_place_node_uuid.unwrap())); + } + data_attributes["usualWorkPlaceNodes"] = json!(usual_work_place_nodes_uuids); + + let mut usual_work_place_nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_usual_work_place_nodes_travel_times()?.len() as usize); + for usual_work_place_node_travel_time in capnp_object.get_usual_work_place_nodes_travel_times()?.iter() { + usual_work_place_nodes_travel_times.push(json!(usual_work_place_node_travel_time)); + } + data_attributes["usualWorkPlaceNodesTravelTimes"] = json!(usual_work_place_nodes_travel_times); + + let mut usual_work_place_nodes_distances : Vec = Vec::with_capacity(capnp_object.get_usual_work_place_nodes_distances()?.len() as usize); + for usual_work_place_node_distance in capnp_object.get_usual_work_place_nodes_distances()?.iter() { + usual_work_place_nodes_distances.push(json!(usual_work_place_node_distance)); + } + data_attributes["usualWorkPlaceNodesDistances"] = json!(usual_work_place_nodes_distances); + } + + if capnp_object.has_usual_school_place_nodes_uuids() + { + let mut usual_school_place_nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_usual_school_place_nodes_uuids()?.len() as usize); + for usual_school_place_node_uuid in capnp_object.get_usual_school_place_nodes_uuids()?.iter() { + usual_school_place_nodes_uuids.push(json!(usual_school_place_node_uuid.unwrap())); + } + data_attributes["usualSchoolPlaceNodes"] = json!(usual_school_place_nodes_uuids); + + let mut usual_school_place_nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_usual_school_place_nodes_travel_times()?.len() as usize); + for usual_school_place_node_travel_time in capnp_object.get_usual_school_place_nodes_travel_times()?.iter() { + usual_school_place_nodes_travel_times.push(json!(usual_school_place_node_travel_time)); + } + data_attributes["usualSchoolPlaceNodesTravelTimes"] = json!(usual_school_place_nodes_travel_times); + + let mut usual_school_place_nodes_distances : Vec = Vec::with_capacity(capnp_object.get_usual_school_place_nodes_distances()?.len() as usize); + for usual_school_place_node_distance in capnp_object.get_usual_school_place_nodes_distances()?.iter() { + usual_school_place_nodes_distances.push(json!(usual_school_place_node_distance)); + } + data_attributes["usualSchoolPlaceNodesDistances"] = json!(usual_school_place_nodes_distances); + } + + let mut object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": capnp_object.get_id(), + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "household_id": empty_str_to_json_null(capnp_object.get_household_uuid()?), + "data_source_id": empty_str_to_json_null(capnp_object.get_data_source_uuid()?), + "occupation": crate::enum_mappings::occupation_to_str(&capnp_object.get_occupation()?), + "gender": crate::enum_mappings::gender_to_str(&capnp_object.get_gender()?), + "age_group": crate::enum_mappings::age_group_to_str(&capnp_object.get_age_group()?), + "expansion_factor": minus_one_f64_to_null(((capnp_object.get_expansion_factor() as f64)*100000.0).round() / 100000.0), // we must round to 5 decimals so we don't get numbers like 2.10000000345454 for n input value of 2.1 + "age": minus_one_i64_to_null(capnp_object.get_age() as i64), + "driving_license_owner": i8_to_json_boolean(capnp_object.get_driving_license_owner()), + "transit_pass_owner": i8_to_json_boolean(capnp_object.get_transit_pass_owner()), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "usual_work_place_walking_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_usual_work_place_walking_travel_time_seconds() as i64), + "usual_work_place_cycling_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_usual_work_place_cycling_travel_time_seconds() as i64), + "usual_work_place_driving_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_usual_work_place_driving_travel_time_seconds() as i64), + "usual_school_place_walking_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_usual_school_place_walking_travel_time_seconds() as i64), + "usual_school_place_cycling_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_usual_school_place_cycling_travel_time_seconds() as i64), + "usual_school_place_driving_travel_time_seconds": minus_one_i64_to_null(capnp_object.get_usual_school_place_driving_travel_time_seconds() as i64), + "data": data_attributes + }); + + if capnp_object.get_usual_work_place_latitude() != -1 + { + let usual_work_place_latitude = (capnp_object.get_usual_work_place_latitude() as f64)/1000000.0; + let usual_work_place_longitude = (capnp_object.get_usual_work_place_longitude() as f64)/1000000.0; + object_json["usual_work_place_geography"] = json!({ + "type": "Point", + "coordinates": [usual_work_place_longitude, usual_work_place_latitude] + }); + } + else + { + object_json["usual_work_place_geography"] = json!(null); + } + if capnp_object.get_usual_school_place_latitude() != -1 + { + let usual_school_place_latitude = (capnp_object.get_usual_school_place_latitude() as f64)/1000000.0; + let usual_school_place_longitude = (capnp_object.get_usual_school_place_longitude() as f64)/1000000.0; + object_json["usual_school_place_geography"] = json!({ + "type": "Point", + "coordinates": [usual_school_place_longitude, usual_school_place_latitude] + }); + } + else + { + object_json["usual_school_place_geography"] = json!(null); + } + + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "persons": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn person_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test", + "data_source_uuid" : "1234-5678" + }); + + let data = r##" + { + "data_source_uuid": "1234-5678", + "persons": [ + { + "id": "1234-1234", + "integer_id": 123, + "is_frozen": true, + "internal_id": "h21", + "data_source_id": "4567-8910", + "household_id": "8910-4567", + "driving_license_owner": true, + "transit_pass_owner": true, + "age": 28, + "age_group": "ag2529", + "gender": "female", + "occupation": "fullTimeStudent", + "expansion_factor": 32.787, + "usual_work_place_geography": { + "type": "Point", + "coordinates": [-73.45, 45.47] + }, + "usual_school_place_geography": { + "type": "Point", + "coordinates": [-73.100115, 45.102445] + }, + "data": { + "foo": "bar", + "usualWorkPlaceNodes": ["abc", "def", "ghi"], + "usualWorkPlaceNodesTravelTimes": [234, 567, 8910], + "usualWorkPlaceNodesDistances": [1243, 3453, 9455], + "usualSchoolPlaceNodes": ["abcd", "defg", "ghil"], + "usualSchoolPlaceNodesTravelTimes": [891, 781, 681], + "usualSchoolPlaceNodesDistances": [466, 566, 666] + }, + "usual_work_place_walking_travel_time_seconds": 212, + "usual_work_place_cycling_travel_time_seconds": 313, + "usual_work_place_driving_travel_time_seconds": 414, + "usual_school_place_walking_travel_time_seconds": 515, + "usual_school_place_cycling_travel_time_seconds": 616, + "usual_school_place_driving_travel_time_seconds": 717 + }, + { + "integer_id": 124, + "id": "2345-2345", + "is_frozen": null + } + ] + } + "##; + + let compare_data = r##" + { + "persons": [ + { + "id": "1234-1234", + "integer_id": 123, + "is_frozen": true, + "internal_id": "h21", + "data_source_id": "4567-8910", + "household_id": "8910-4567", + "driving_license_owner": true, + "transit_pass_owner": true, + "age": 28, + "age_group": "ag2529", + "gender": "female", + "occupation": "fullTimeStudent", + "expansion_factor": 32.787, + "usual_work_place_geography": { + "type": "Point", + "coordinates": [-73.45, 45.47] + }, + "usual_school_place_geography": { + "type": "Point", + "coordinates": [-73.100115, 45.102445] + }, + "data": { + "foo": "bar", + "usualWorkPlaceNodes": ["abc", "def", "ghi"], + "usualWorkPlaceNodesTravelTimes": [234, 567, 8910], + "usualWorkPlaceNodesDistances": [1243, 3453, 9455], + "usualSchoolPlaceNodes": ["abcd", "defg", "ghil"], + "usualSchoolPlaceNodesTravelTimes": [891, 781, 681], + "usualSchoolPlaceNodesDistances": [466, 566, 666] + }, + "usual_work_place_walking_travel_time_seconds": 212, + "usual_work_place_cycling_travel_time_seconds": 313, + "usual_work_place_driving_travel_time_seconds": 414, + "usual_school_place_walking_travel_time_seconds": 515, + "usual_school_place_cycling_travel_time_seconds": 616, + "usual_school_place_driving_travel_time_seconds": 717 + }, + { + "id": "2345-2345", + "is_frozen": null, + "internal_id": null, + "integer_id": 124, + "data_source_id": null, + "data": {}, + "household_id": null, + "age": null, + "driving_license_owner": null, + "transit_pass_owner": null, + "gender": "none", + "occupation": "none", + "age_group": "none", + "expansion_factor": null, + "usual_work_place_geography": null, + "usual_school_place_geography": null, + "usual_work_place_walking_travel_time_seconds": null, + "usual_work_place_cycling_travel_time_seconds": null, + "usual_work_place_driving_travel_time_seconds": null, + "usual_school_place_walking_travel_time_seconds": null, + "usual_school_place_cycling_travel_time_seconds": null, + "usual_school_place_driving_travel_time_seconds": null + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/persons", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "persons", + "persons", + &config, + &routers::person_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "persons", + "persons", + &config, + &routers::person_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["persons"], json_compare_data["persons"]); + + } +} + + + + diff --git a/services/json2capnp/src/routers/place_collection_router.rs b/services/json2capnp/src/routers/place_collection_router.rs new file mode 100644 index 000000000..2ada2aadb --- /dev/null +++ b/services/json2capnp/src/routers/place_collection_router.rs @@ -0,0 +1,339 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::placeCollection_capnp::place_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::{Value as GeojsonValue}; +use geojson::GeoJson; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let geojson_data : GeoJson = GeoJson::from_json_value((json["places"]).clone()).unwrap(); + + match geojson_data { + geojson::GeoJson::FeatureCollection(feature_collection) => { + + let features_count = feature_collection.features.len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_places(features_count as u32); + + for i in 0..features_count { + let feature = &feature_collection.features[i]; + + let mut capnp_data = capnp.reborrow().get(i as u32); + let geojson_value = feature.geometry.to_owned().unwrap().value; + let latitude; + let longitude; + match geojson_value { + GeojsonValue::Point(point) => { + longitude = (point[0] * 1000000.0).round() as i32; + latitude = (point[1] * 1000000.0).round() as i32; + }, + _ => { + longitude = -1; + latitude = -1; + } + } + let mut properties = feature.properties.clone().unwrap(); + + capnp_data.set_uuid(&required_string(properties.get("id"))); + capnp_data.set_data_source_uuid(&optional_string(properties.get("data_source_id"))); + capnp_data.set_id(properties.get("integer_id").unwrap().as_u64().unwrap() as u32); // required + capnp_data.set_internal_id(&optional_string(properties.get("internal_id"))); + capnp_data.set_shortname(&optional_string(properties.get("shortname"))); + capnp_data.set_name(&optional_string(properties.get("name"))); + capnp_data.set_description(&optional_string(properties.get("description"))); + capnp_data.set_data(&properties.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(properties.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_latitude(latitude); + capnp_data.set_longitude(longitude); + + if properties.get("data") != None && properties["data"].is_object() && properties["data"].get("nodes") != None && properties["data"]["nodes"].is_array() + { + let nodes_count = properties["data"]["nodes"].as_array().unwrap().len(); + capnp_data.reborrow().init_nodes_uuids(nodes_count as u32); + capnp_data.reborrow().init_nodes_travel_times(nodes_count as u32); + capnp_data.reborrow().init_nodes_distances(nodes_count as u32); + for j in 0..nodes_count + { + capnp_data.reborrow().get_nodes_uuids().unwrap().set(j as u32, properties["data"]["nodes"][j].as_str().unwrap()); + capnp_data.reborrow().get_nodes_travel_times().unwrap().set(j as u32, properties["data"]["nodesTravelTimes"][j].as_i64().unwrap() as i16); + capnp_data.reborrow().get_nodes_distances().unwrap().set(j as u32, properties["data"]["nodesDistances"][j].as_i64().unwrap() as i16); + } + + // remove nodes and associates: + properties["data"]["nodes"].take(); + properties["data"]["nodesTravelTimes"].take(); + properties["data"]["nodesDistances"].take(); + } + } + + serialize_packed::write_message(file, &message) + }, + _ => { + Err(capnp::Error::failed(String::from("Zones geojson is invalid, empty or not a FeatureCollection"))) + } + } + +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_places()?.len() as usize); + + for capnp_object in capnp_collection.get_places()?.iter() { + + let mut data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + + let latitude = (capnp_object.get_latitude() as f64)/1000000.0; + let longitude = (capnp_object.get_longitude() as f64)/1000000.0; + + if capnp_object.has_nodes_uuids() + { + let mut nodes_uuids : Vec = Vec::with_capacity(capnp_object.get_nodes_uuids()?.len() as usize); + for node_uuid in capnp_object.get_nodes_uuids()?.iter() { + nodes_uuids.push(json!(node_uuid.unwrap())); + } + data_attributes["nodes"] = json!(nodes_uuids); + + let mut nodes_travel_times : Vec = Vec::with_capacity(capnp_object.get_nodes_travel_times()?.len() as usize); + for node_travel_time in capnp_object.get_nodes_travel_times()?.iter() { + nodes_travel_times.push(json!(node_travel_time)); + } + data_attributes["nodesTravelTimes"] = json!(nodes_travel_times); + + let mut nodes_distances : Vec = Vec::with_capacity(capnp_object.get_nodes_distances()?.len() as usize); + for node_distance in capnp_object.get_nodes_distances()?.iter() { + nodes_distances.push(json!(node_distance)); + } + data_attributes["nodesDistances"] = json!(nodes_distances); + } + + let integer_id = capnp_object.get_id() as u32; + + let properties_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": integer_id, + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "shortname": empty_str_to_json_null(capnp_object.get_shortname()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "data_source_id": empty_str_to_json_null(capnp_object.get_data_source_uuid()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "data": data_attributes + }); + + let mut geojson = json!({ + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [longitude, latitude] + } + }); + + geojson["id"] = json!(integer_id); + geojson["properties"] = properties_json; + + collection_json_vec.push(geojson); + + } + + Ok(json!({ + "places": { + "type": "FeatureCollection", + "features": serde_json::Value::Array(collection_json_vec) + } + })) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn place_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test", + "data_source_uuid" : "1234-5678" + }); + + let data = r##" + { + "data_source_uuid": "1234-5678", + "places": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 1234, + "properties": { + "id": "1234-1234", + "integer_id": 1234, + "is_frozen": true, + "internal_id": "iid", + "data_source_id": "4567-8910", + "shortname": "place", + "name": "Place", + "description": "desc.", + "data": { + "foo": "bar", + "nodes": ["abc", "def", "efg"], + "nodesTravelTimes": [234, 567, 8910], + "nodesDistances": [1243, 3453, 9455] + } + } + + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-75.45785, 44.45577] + }, + "id": 1245, + "properties": { + "integer_id": 1245, + "id": "2345-2345", + "is_frozen": null + } + } + ] + } + } + "##; + + let compare_data = r##" + { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-72.963302,45.639486] + }, + "id": 1234, + "properties": { + "id": "1234-1234", + "integer_id": 1234, + "is_frozen": true, + "internal_id": "iid", + "data_source_id": "4567-8910", + "shortname": "place", + "name": "Place", + "description": "desc.", + "data": { + "foo": "bar", + "nodes": ["abc", "def", "efg"], + "nodesTravelTimes": [234, 567, 8910], + "nodesDistances": [1243, 3453, 9455] + } + } + + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [-75.45785, 44.45577] + }, + "id": 1245, + "properties": { + "id": "2345-2345", + "is_frozen": null, + "internal_id": null, + "integer_id": 1245, + "data_source_id": null, + "data": {}, + "shortname": null, + "name": null, + "description": null + } + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/places", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "places", + "places", + &config, + &routers::place_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "places", + "places", + &config, + &routers::place_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["places"], json_compare_data); + + } +} + + + + diff --git a/services/json2capnp/src/routers/scenario_collection_router.rs b/services/json2capnp/src/routers/scenario_collection_router.rs new file mode 100644 index 000000000..b07377542 --- /dev/null +++ b/services/json2capnp/src/routers/scenario_collection_router.rs @@ -0,0 +1,473 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::scenarioCollection_capnp::scenario_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["scenarios"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_scenarios(count as u32); + + for i in 0..count { + let json_data = &json_objects[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_simulation_uuid(&optional_string(json_data.get("simulation_id"))); + capnp_data.set_name(&optional_string(json_data.get("name"))); + capnp_data.set_color(&optional_string(json_data.get("color"))); + capnp_data.set_description(&optional_string(json_data.get("description"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(json_data.get("is_enabled").unwrap_or(&json!(null)))); + + if json_data.get("services") != None && json_data["services"].is_array() + { + let services_optional = json_data.get("services").unwrap().as_array(); + if services_optional != None { + let services = services_optional.unwrap(); + let services_count: usize = services.len(); + + capnp_data.reborrow().init_services_uuids(services_count as u32); + for j in 0..services_count + { + capnp_data.reborrow().get_services_uuids().unwrap().set(j as u32, services[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_services_uuids(0); + } + } + + if json_data.get("only_lines") != None && json_data["only_lines"].is_array() + { + let only_lines_optional = json_data.get("only_lines").unwrap().as_array(); + if only_lines_optional != None { + let only_lines = only_lines_optional.unwrap(); + let only_lines_count: usize = only_lines.len(); + + capnp_data.reborrow().init_only_lines_uuids(only_lines_count as u32); + for j in 0..only_lines_count + { + capnp_data.reborrow().get_only_lines_uuids().unwrap().set(j as u32, only_lines[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_only_lines_uuids(0); + } + } + + if json_data.get("except_lines") != None && json_data["except_lines"].is_array() + { + let except_lines_optional = json_data.get("except_lines").unwrap().as_array(); + if except_lines_optional != None { + let except_lines = except_lines_optional.unwrap(); + let except_lines_count: usize = except_lines.len(); + + capnp_data.reborrow().init_except_lines_uuids(except_lines_count as u32); + for j in 0..except_lines_count + { + capnp_data.reborrow().get_except_lines_uuids().unwrap().set(j as u32, except_lines[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_except_lines_uuids(0); + } + } + + if json_data.get("only_agencies") != None && json_data["only_agencies"].is_array() + { + let only_agencies_optional = json_data.get("only_agencies").unwrap().as_array(); + if only_agencies_optional != None { + let only_agencies = only_agencies_optional.unwrap(); + let only_agencies_count: usize = only_agencies.len(); + + capnp_data.reborrow().init_only_agencies_uuids(only_agencies_count as u32); + for j in 0..only_agencies_count + { + capnp_data.reborrow().get_only_agencies_uuids().unwrap().set(j as u32, only_agencies[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_only_agencies_uuids(0); + } + } + + if json_data.get("except_agencies") != None && json_data["except_agencies"].is_array() + { + let except_agencies_optional = json_data.get("except_agencies").unwrap().as_array(); + if except_agencies_optional != None { + let except_agencies = except_agencies_optional.unwrap(); + let except_agencies_count: usize = except_agencies.len(); + + capnp_data.reborrow().init_except_agencies_uuids(except_agencies_count as u32); + for j in 0..except_agencies_count + { + capnp_data.reborrow().get_except_agencies_uuids().unwrap().set(j as u32, except_agencies[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_except_agencies_uuids(0); + } + } + + if json_data.get("only_nodes") != None && json_data["only_nodes"].is_array() + { + let only_nodes_optional = json_data.get("only_nodes").unwrap().as_array(); + if only_nodes_optional != None { + let only_nodes = only_nodes_optional.unwrap(); + let only_nodes_count: usize = only_nodes.len(); + + capnp_data.reborrow().init_only_nodes_uuids(only_nodes_count as u32); + for j in 0..only_nodes_count + { + capnp_data.reborrow().get_only_nodes_uuids().unwrap().set(j as u32, only_nodes[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_only_nodes_uuids(0); + } + } + + if json_data.get("except_nodes") != None && json_data["except_nodes"].is_array() + { + let except_nodes_optional = json_data.get("except_nodes").unwrap().as_array(); + if except_nodes_optional != None { + let except_nodes = except_nodes_optional.unwrap(); + let except_nodes_count: usize = except_nodes.len(); + + capnp_data.reborrow().init_except_nodes_uuids(except_nodes_count as u32); + for j in 0..except_nodes_count + { + capnp_data.reborrow().get_except_nodes_uuids().unwrap().set(j as u32, except_nodes[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_except_nodes_uuids(0); + } + } + + if json_data.get("only_modes") != None && json_data["only_modes"].is_array() + { + let only_modes_shortnames_optional = json_data.get("only_modes").unwrap().as_array(); + if only_modes_shortnames_optional != None { + let only_modes_shortnames = only_modes_shortnames_optional.unwrap(); + let only_modes_shortnames_count: usize = only_modes_shortnames.len(); + + capnp_data.reborrow().init_only_modes_shortnames(only_modes_shortnames_count as u32); + for j in 0..only_modes_shortnames_count + { + capnp_data.reborrow().get_only_modes_shortnames().unwrap().set(j as u32, only_modes_shortnames[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_only_modes_shortnames(0); + } + } + + if json_data.get("except_modes") != None && json_data["except_modes"].is_array() + { + let except_modes_shortnames_optional = json_data.get("except_modes").unwrap().as_array(); + if except_modes_shortnames_optional != None { + let except_modes_shortnames = except_modes_shortnames_optional.unwrap(); + let except_modes_shortnames_count: usize = except_modes_shortnames.len(); + + capnp_data.reborrow().init_except_modes_shortnames(except_modes_shortnames_count as u32); + for j in 0..except_modes_shortnames_count + { + capnp_data.reborrow().get_except_modes_shortnames().unwrap().set(j as u32, except_modes_shortnames[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_except_modes_shortnames(0); + } + } + + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_scenarios()?.len() as usize); + + for capnp_object in capnp_collection.get_scenarios()?.iter() { + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let mut object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "simulation_id": empty_str_to_json_null(capnp_object.get_simulation_uuid()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "data": data_attributes + }); + + let mut services_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_services_uuids()?.len() as usize); + for service_uuid in capnp_object.get_services_uuids()?.iter() { + services_uuids_vec.push(json!(service_uuid.unwrap())); + } + object_json["services"] = json!(services_uuids_vec); + + let mut only_agencies_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_only_agencies_uuids()?.len() as usize); + for only_agency_uuid in capnp_object.get_only_agencies_uuids()?.iter() { + only_agencies_uuids_vec.push(json!(only_agency_uuid.unwrap())); + } + object_json["only_agencies"] = json!(only_agencies_uuids_vec); + + let mut except_agencies_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_except_agencies_uuids()?.len() as usize); + for except_agency_uuid in capnp_object.get_except_agencies_uuids()?.iter() { + except_agencies_uuids_vec.push(json!(except_agency_uuid.unwrap())); + } + object_json["except_agencies"] = json!(except_agencies_uuids_vec); + + let mut only_lines_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_only_lines_uuids()?.len() as usize); + for only_line_uuid in capnp_object.get_only_lines_uuids()?.iter() { + only_lines_uuids_vec.push(json!(only_line_uuid.unwrap())); + } + object_json["only_lines"] = json!(only_lines_uuids_vec); + + let mut except_lines_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_except_lines_uuids()?.len() as usize); + for except_line_uuid in capnp_object.get_except_lines_uuids()?.iter() { + except_lines_uuids_vec.push(json!(except_line_uuid.unwrap())); + } + object_json["except_lines"] = json!(except_lines_uuids_vec); + + let mut only_nodes_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_only_nodes_uuids()?.len() as usize); + for only_node_uuid in capnp_object.get_only_nodes_uuids()?.iter() { + only_nodes_uuids_vec.push(json!(only_node_uuid.unwrap())); + } + object_json["only_nodes"] = json!(only_nodes_uuids_vec); + + let mut except_nodes_uuids_vec : Vec = Vec::with_capacity(capnp_object.get_except_nodes_uuids()?.len() as usize); + for except_node_uuid in capnp_object.get_except_nodes_uuids()?.iter() { + except_nodes_uuids_vec.push(json!(except_node_uuid.unwrap())); + } + object_json["except_nodes"] = json!(except_nodes_uuids_vec); + + let mut only_modes_shortnames_vec : Vec = Vec::with_capacity(capnp_object.get_only_modes_shortnames()?.len() as usize); + for only_mode_shortname in capnp_object.get_only_modes_shortnames()?.iter() { + only_modes_shortnames_vec.push(json!(only_mode_shortname.unwrap())); + } + object_json["only_modes"] = json!(only_modes_shortnames_vec); + + let mut except_modes_shortnames_vec : Vec = Vec::with_capacity(capnp_object.get_except_modes_shortnames()?.len() as usize); + for except_mode_shortname in capnp_object.get_except_modes_shortnames()?.iter() { + except_modes_shortnames_vec.push(json!(except_mode_shortname.unwrap())); + } + object_json["except_modes"] = json!(except_modes_shortnames_vec); + + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "scenarios": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn scenario_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "scenarios": [ + { + "id": "1234-1234", + "is_enabled": null, + "is_frozen": true, + "color": "#FFFFFF", + "description": "testDescription", + "name": "Name", + "simulation_id": null, + "data": { + "foo": "bar" + }, + "services": ["1", "2", "3"], + "only_agencies": ["1111", "22222", "33333"], + "except_agencies": ["111", "222", "333"], + "only_lines": ["11110", "222220", "333330"], + "except_lines": ["1110", "2220", "3330"], + "only_nodes": ["01111", "022222", "033333"], + "except_nodes": ["0111", "0222", "0333"], + "only_modes": ["bus", "plane", "boat"], + "except_modes": ["car", "walk", "oops"] + }, + { + "id": "2345-2345" + }, + { + "id": "2345-2345", + "is_enabled": true, + "is_frozen": false, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "scenarios": [ + { + "id": "1234-1234", + "is_enabled": null, + "is_frozen": true, + "color": "#FFFFFF", + "description": "testDescription", + "name": "Name", + "simulation_id": null, + "data": { + "foo": "bar" + }, + "services": ["1", "2", "3"], + "only_agencies": ["1111", "22222", "33333"], + "except_agencies": ["111", "222", "333"], + "only_lines": ["11110", "222220", "333330"], + "except_lines": ["1110", "2220", "3330"], + "only_nodes": ["01111", "022222", "033333"], + "except_nodes": ["0111", "0222", "0333"], + "only_modes": ["bus", "plane", "boat"], + "except_modes": ["car", "walk", "oops"] + }, + { + "id": "2345-2345", + "is_enabled": null, + "is_frozen": null, + "color": null, + "description": null, + "name": null, + "simulation_id": null, + "data": {}, + "services": [], + "only_agencies": [], + "except_agencies": [], + "only_lines": [], + "except_lines": [], + "only_nodes": [], + "except_nodes": [], + "only_modes": [], + "except_modes": [] + }, + { + "id": "2345-2345", + "is_enabled": true, + "is_frozen": false, + "color": null, + "description": null, + "name": null, + "simulation_id": null, + "data": {}, + "services": [], + "only_agencies": [], + "except_agencies": [], + "only_lines": [], + "except_lines": [], + "only_nodes": [], + "except_nodes": [], + "only_modes": [], + "except_modes": [] + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/scenarios", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "scenarios", + "scenarios", + &config, + &routers::scenario_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "scenarios", + "scenarios", + &config, + &routers::scenario_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["scenarios"], json_compare_data["scenarios"]); + + } +} diff --git a/services/json2capnp/src/routers/service_collection_router.rs b/services/json2capnp/src/routers/service_collection_router.rs new file mode 100644 index 000000000..0c37edaf1 --- /dev/null +++ b/services/json2capnp/src/routers/service_collection_router.rs @@ -0,0 +1,333 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::serviceCollection_capnp::service_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["services"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_services(count as u32); + + for i in 0..count { + let json_data = &json_objects[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_simulation_uuid(&optional_string(json_data.get("simulation_id"))); + capnp_data.set_name(&optional_string(json_data.get("name"))); + capnp_data.set_color(&optional_string(json_data.get("color"))); + capnp_data.set_description(&optional_string(json_data.get("description"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(json_data.get("is_enabled").unwrap_or(&json!(null)))); + capnp_data.set_monday(json_boolean_to_i8(json_data.get("monday").unwrap_or(&json!(null)))); + capnp_data.set_monday(json_boolean_to_i8(json_data.get("monday").unwrap_or(&json!(null)))); + capnp_data.set_tuesday(json_boolean_to_i8(json_data.get("tuesday").unwrap_or(&json!(null)))); + capnp_data.set_wednesday(json_boolean_to_i8(json_data.get("wednesday").unwrap_or(&json!(null)))); + capnp_data.set_thursday(json_boolean_to_i8(json_data.get("thursday").unwrap_or(&json!(null)))); + capnp_data.set_friday(json_boolean_to_i8(json_data.get("friday").unwrap_or(&json!(null)))); + capnp_data.set_saturday(json_boolean_to_i8(json_data.get("saturday").unwrap_or(&json!(null)))); + capnp_data.set_sunday(json_boolean_to_i8(json_data.get("sunday").unwrap_or(&json!(null)))); + capnp_data.set_start_date(&optional_string(json_data.get("start_date"))); + capnp_data.set_end_date(&optional_string(json_data.get("end_date"))); + + if json_data.get("only_dates") != None && json_data["only_dates"].is_array() + { + let only_dates_optional = json_data.get("only_dates").unwrap().as_array(); + if only_dates_optional != None { + let only_dates = only_dates_optional.unwrap(); + let only_dates_count: usize = only_dates.len(); + + capnp_data.reborrow().init_only_dates(only_dates_count as u32); + for j in 0..only_dates_count + { + capnp_data.reborrow().get_only_dates().unwrap().set(j as u32, only_dates[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_only_dates(0); + } + } + + if json_data.get("except_dates") != None && json_data["except_dates"].is_array() + { + let except_dates_optional = json_data.get("except_dates").unwrap().as_array(); + if except_dates_optional != None { + let except_dates = except_dates_optional.unwrap(); + let except_dates_count: usize = except_dates.len(); + + capnp_data.reborrow().init_except_dates(except_dates_count as u32); + for j in 0..except_dates_count + { + capnp_data.reborrow().get_except_dates().unwrap().set(j as u32, except_dates[j].as_str().unwrap()); + } + } + else + { + capnp_data.reborrow().init_except_dates(0); + } + } + + + + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_services()?.len() as usize); + + for capnp_object in capnp_collection.get_services()?.iter() { + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let mut object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "simulation_id": empty_str_to_json_null(capnp_object.get_simulation_uuid()?), + "name": empty_str_to_json_null(capnp_object.get_name()?), + "color": empty_str_to_json_null(capnp_object.get_color()?), + "description": empty_str_to_json_null(capnp_object.get_description()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "monday": i8_to_json_boolean(capnp_object.get_monday()), + "tuesday": i8_to_json_boolean(capnp_object.get_tuesday()), + "wednesday": i8_to_json_boolean(capnp_object.get_wednesday()), + "thursday": i8_to_json_boolean(capnp_object.get_thursday()), + "friday": i8_to_json_boolean(capnp_object.get_friday()), + "saturday": i8_to_json_boolean(capnp_object.get_saturday()), + "sunday": i8_to_json_boolean(capnp_object.get_sunday()), + "start_date": empty_str_to_json_null(capnp_object.get_start_date()?), + "end_date": empty_str_to_json_null(capnp_object.get_end_date()?), + "data": data_attributes + }); + + let mut only_dates_vec : Vec = Vec::with_capacity(capnp_object.get_only_dates()?.len() as usize); + for only_date in capnp_object.get_only_dates()?.iter() { + only_dates_vec.push(json!(only_date.unwrap())); + } + object_json["only_dates"] = json!(only_dates_vec); + + let mut except_dates_vec : Vec = Vec::with_capacity(capnp_object.get_except_dates()?.len() as usize); + for except_date in capnp_object.get_except_dates()?.iter() { + except_dates_vec.push(json!(except_date.unwrap())); + } + object_json["except_dates"] = json!(except_dates_vec); + + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "services": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn service_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "services": [ + { + "id": "1234-1234", + "is_enabled": null, + "is_frozen": true, + "internal_id": "iid", + "color": "#FFFFFF", + "description": "testDescription", + "name": "Name", + "simulation_id": "456-789", + "monday": true, + "tuesday": true, + "wednesday": false, + "thursday": false, + "friday": true, + "saturday": true, + "sunday": false, + "start_date": "2020-01-01", + "end_date": "2021-12-31", + "data": { + "foo": "bar" + }, + "only_dates": ["2020-01-01", "2020-02-02", "2020-03-03"], + "except_dates": ["2021-01-01", "2021-02-02", "2021-03-03"] + }, + { + "id": "2345-2345" + }, + { + "id": "2345-2346", + "is_enabled": true, + "is_frozen": false, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "services": [ + { + "id": "1234-1234", + "is_enabled": null, + "is_frozen": true, + "internal_id": "iid", + "color": "#FFFFFF", + "description": "testDescription", + "name": "Name", + "simulation_id": "456-789", + "monday": true, + "tuesday": true, + "wednesday": false, + "thursday": false, + "friday": true, + "saturday": true, + "sunday": false, + "start_date": "2020-01-01", + "end_date": "2021-12-31", + "data": { + "foo": "bar" + }, + "only_dates": ["2020-01-01", "2020-02-02", "2020-03-03"], + "except_dates": ["2021-01-01", "2021-02-02", "2021-03-03"] + }, + { + "id": "2345-2345", + "internal_id": null, + "is_enabled": null, + "is_frozen": null, + "color": null, + "description": null, + "name": null, + "simulation_id": null, + "data": {}, + "monday": null, + "tuesday": null, + "wednesday": null, + "thursday": null, + "friday": null, + "saturday": null, + "sunday": null, + "start_date": null, + "end_date": null, + "only_dates": [], + "except_dates": [] + }, + { + "id": "2345-2346", + "internal_id": null, + "is_enabled": true, + "is_frozen": false, + "color": null, + "description": null, + "name": null, + "simulation_id": null, + "data": {}, + "monday": null, + "tuesday": null, + "wednesday": null, + "thursday": null, + "friday": null, + "saturday": null, + "sunday": null, + "start_date": null, + "end_date": null, + "only_dates": [], + "except_dates": [] + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/services", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "services", + "services", + &config, + &routers::service_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "services", + "services", + &config, + &routers::service_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["services"], json_compare_data["services"]); + + } +} diff --git a/services/json2capnp/src/routers/station_collection_router.rs b/services/json2capnp/src/routers/station_collection_router.rs new file mode 100644 index 000000000..e671a225d --- /dev/null +++ b/services/json2capnp/src/routers/station_collection_router.rs @@ -0,0 +1,8 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + diff --git a/services/json2capnp/src/routers/taxi_point_collection_router.rs b/services/json2capnp/src/routers/taxi_point_collection_router.rs new file mode 100644 index 000000000..2d27d9d68 --- /dev/null +++ b/services/json2capnp/src/routers/taxi_point_collection_router.rs @@ -0,0 +1,115 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +/*use serde_json; +use crate::taxiPointCollection_capnp::{taxi_point_collection as collection}; +use capnp::serialize_packed; +//use crate::my_error::MyError; +//use uuid::Uuid; +use std::path::{Path}; +use std::io::Read; +use std::io::prelude::*; +*/ +/* +taxiId @1 :UInt32; # includes vehicle, driver and permit # pk 1 +operatorId @2 :UInt16; # pk 2 +timestamp @3 :UInt32; # utc # pk 3 +status @4 :Status; +latitude @5 :Int32; # divide by 1000000 to get float +longitude @6 :Int32; # divide by 1000000 to get float +speed @7 :Int16; +azimuth @8 :Int16; +device @9 :Device; +*/ + +/* +pub fn write_collection(json: &serde_json::Value, file: &mut std::fs::File, config: &serde_json::Value) -> ::std::result::Result<(), capnp::Error> { + + println!("receiving data..."); + + // read taxi ids mapping from json project file, or create it if not exists: + let taxi_ids_mapping_json_file_path_str = format!("{}/taxi_ids_mapping.json", config["project_directory_path"].as_str().unwrap()); + let taxi_ids_mapping_json_file_path = Path::new(&taxi_ids_mapping_json_file_path_str); + + let taxi_ids_mapping_json_file_path_exists = taxi_ids_mapping_json_file_path.exists(); + + let mut taxi_ids_mapping_json_file = match taxi_ids_mapping_json_file_path_exists { + true => std::fs::File::open(&taxi_ids_mapping_json_file_path), + false => std::fs::File::create(&taxi_ids_mapping_json_file_path) + }.unwrap(); + + let mut taxi_ids_mapping: serde_json::Value; + if taxi_ids_mapping_json_file_path_exists + { + println!("reading taxi ids mapping json file"); + let mut taxi_ids_mapping_str = String::new(); + taxi_ids_mapping_json_file.read_to_string(&mut taxi_ids_mapping_str); + taxi_ids_mapping = serde_json::from_str(&taxi_ids_mapping_str).unwrap(); + } + else + { + println!("writing taxi ids mapping json file"); + taxi_ids_mapping_json_file.write_all("{}".as_bytes()); + taxi_ids_mapping = json!({}); + } + + // repeat for operator_id + + + + /*if (!json.as_map().contains_key("items")) + { + return Err( std::io::Error::new( + std::io::ErrorKind::InvalidData, + MyError::new(&String::from("missing items key in json data")) + )) + }*/ + + + let mut message = ::capnp::message::Builder::new_default(); + + let count_root_items: usize = json.as_array().unwrap().len(); + + + let mut flatten_items = std::vec::Vec::new(); + + for i in 0..count_root_items + { + let json_items = &json[i]["items"].as_array().unwrap(); + for j in 0..json_items.len() + { + flatten_items.push(&json_items[j]); + } + } + + let count: usize = flatten_items.len(); + + println!("received {} taxi points", count); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_taxi_points(count as u32); + + for i in 0..count + { + let json_data = &flatten_items[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + + //Uuid::new_v4(); + + /*capnp_data.set_uuid(&json_data["id"].to_string()); + capnp_data.set_type(crate::enum_mappings::data_source_type(&json_data["type"].to_string())); + capnp_data.set_shortname(&crate::utils::string_or_null_to_empty_string(&json_data["shortname"].to_string())); + capnp_data.set_name(&crate::utils::string_or_null_to_empty_string(&json_data["name"].to_string())); + capnp_data.set_description(&crate::utils::string_or_null_to_empty_string(&json_data["description"].to_string())); + capnp_data.set_data(&crate::utils::string_or_null_to_empty_string(&json_data["data"].to_string())); + capnp_data.set_is_frozen(crate::utils::json_boolean_to_i8(&json_data["is_frozen"]));*/ + } + + serialize_packed::write_message(file, &message) + +} +*/ \ No newline at end of file diff --git a/services/json2capnp/src/routers/unit_collection_router.rs b/services/json2capnp/src/routers/unit_collection_router.rs new file mode 100644 index 000000000..4ac0acd8f --- /dev/null +++ b/services/json2capnp/src/routers/unit_collection_router.rs @@ -0,0 +1,302 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::unitCollection_capnp::unit_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use crate::utils::{ + required_string, + optional_string_json_null_to_empty_str as optional_string, + json_boolean_to_i8, + empty_str_to_json_null, + i8_to_json_boolean, + minus_one_f64_to_null, + json_value_or_null_to_i64_or_minus_one, + json_value_or_null_to_f64_or_minus_one, + minus_one_i64_to_null +}; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let json_objects = &json["units"]; + + let count: usize = json_objects.as_array().unwrap().len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_units(count as u32); + + for i in 0..count { + let json_data = &json_objects[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + capnp_data.set_uuid(&required_string(json_data.get("id"))); // required + capnp_data.set_id(json_data.get("integer_id").unwrap().as_i64().unwrap() as i32); // required + capnp_data.set_internal_id(&optional_string(json_data.get("internal_id"))); + capnp_data.set_agency_uuid(&optional_string(json_data.get("agency_id"))); + capnp_data.set_garage_uuid(&optional_string(json_data.get("garage_id"))); + capnp_data.set_line_uuid(&optional_string(json_data.get("line_id"))); + capnp_data.set_mode(&optional_string(json_data.get("mode"))); + capnp_data.set_manufacturer(&optional_string(json_data.get("manufacturer"))); + capnp_data.set_model(&optional_string(json_data.get("model"))); + capnp_data.set_license_number(&optional_string(json_data.get("license_number"))); + capnp_data.set_serial_number(&optional_string(json_data.get("serial_number"))); + capnp_data.set_capacity_seated(json_value_or_null_to_i64_or_minus_one(&json_data.get("capacity_seated").unwrap_or(&json!(null))) as i16); + capnp_data.set_capacity_standing(json_value_or_null_to_i64_or_minus_one(&json_data.get("capacity_standing").unwrap_or(&json!(null))) as i16); + capnp_data.set_number_of_vehicles(json_value_or_null_to_i64_or_minus_one(&json_data.get("number_of_vehicles").unwrap_or(&json!(null))) as i16); + capnp_data.set_number_of_doors(json_value_or_null_to_i64_or_minus_one(&json_data.get("number_of_doors").unwrap_or(&json!(null))) as i16); + capnp_data.set_number_of_door_channels(json_value_or_null_to_i64_or_minus_one(&json_data.get("number_of_door_channels").unwrap_or(&json!(null))) as i16); + capnp_data.set_length_mm(json_value_or_null_to_f64_or_minus_one(&json_data.get("length_mm").unwrap_or(&json!(null))) as f32); + capnp_data.set_width_mm(json_value_or_null_to_f64_or_minus_one(&json_data.get("width_mm").unwrap_or(&json!(null))) as f32); + capnp_data.set_color(&optional_string(json_data.get("color"))); + capnp_data.set_data(&json_data.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(json_boolean_to_i8(json_data.get("is_frozen").unwrap_or(&json!(null)))); + capnp_data.set_is_enabled(json_boolean_to_i8(json_data.get("is_enabled").unwrap_or(&json!(null)))); + } + + serialize_packed::write_message(file, &message) +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_units()?.len() as usize); + + for capnp_object in capnp_collection.get_units()?.iter() { + + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let integer_id = capnp_object.get_id() as i32; + let object_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "internal_id": empty_str_to_json_null(capnp_object.get_internal_id()?), + "integer_id": integer_id, + "agency_id": empty_str_to_json_null(capnp_object.get_agency_uuid()?), + "garage_id": empty_str_to_json_null(capnp_object.get_garage_uuid()?), + "line_id": empty_str_to_json_null(capnp_object.get_line_uuid()?), + "mode": empty_str_to_json_null(capnp_object.get_mode()?), + "manufacturer": empty_str_to_json_null(capnp_object.get_manufacturer()?), + "model": empty_str_to_json_null(capnp_object.get_model()?), + "license_number": empty_str_to_json_null(capnp_object.get_license_number()?), + "serial_number": empty_str_to_json_null(capnp_object.get_serial_number()?), + "capacity_seated": minus_one_i64_to_null(capnp_object.get_capacity_seated() as i64), + "capacity_standing": minus_one_i64_to_null(capnp_object.get_capacity_standing() as i64), + "number_of_vehicles": minus_one_i64_to_null(capnp_object.get_number_of_vehicles() as i64), + "number_of_doors": minus_one_i64_to_null(capnp_object.get_number_of_doors() as i64), + "number_of_door_channels": minus_one_i64_to_null(capnp_object.get_number_of_door_channels() as i64), + "length_mm": minus_one_f64_to_null(((capnp_object.get_length_mm() as f64)*100000.0).round() / 100000.0), // we must round to 5 decimals so we don't get numbers like 2.10000000345454 for n input value of 2.1 + "width_mm": minus_one_f64_to_null(((capnp_object.get_width_mm() as f64)*100000.0).round() / 100000.0), // we must round to 5 decimals so we don't get numbers like 2.10000000345454 for n input value of 2.1 + "color": empty_str_to_json_null(capnp_object.get_color()?), + "is_frozen": i8_to_json_boolean(capnp_object.get_is_frozen()), + "is_enabled": i8_to_json_boolean(capnp_object.get_is_enabled()), + "data": data_attributes + }); + + collection_json_vec.push(object_json); + + } + + let collection_json = json!({ + "units": serde_json::Value::Array(collection_json_vec) + }); + + Ok(collection_json) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn unit_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "units": [ + { + "id": "1234-1234", + "integer_id": 22, + "is_enabled": null, + "is_frozen": true, + "internal_id": "iid", + "color": "#FFFFFF", + "agency_id": "999-999", + "garage_id": "888-999", + "line_id": "777-999", + "mode": "bus", + "manufacturer": "busMaker", + "model": "busModel", + "license_number": "A12345", + "serial_number": "654fdsd876234", + "capacity_seated": 24, + "capacity_standing": 31, + "number_of_vehicles": 1, + "number_of_doors": 2, + "number_of_door_channels": 3, + "length_mm": 254.78, + "width_mm": 798, + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "integer_id": 23 + }, + { + "id": "2345-2346", + "integer_id": 24, + "is_enabled": true, + "is_frozen": false, + "data": {} + } + ] + } + "##; + + let compare_data = r##" + { + "units": [ + { + "id": "1234-1234", + "integer_id": 22, + "is_enabled": null, + "is_frozen": true, + "internal_id": "iid", + "color": "#FFFFFF", + "agency_id": "999-999", + "garage_id": "888-999", + "line_id": "777-999", + "mode": "bus", + "manufacturer": "busMaker", + "model": "busModel", + "license_number": "A12345", + "serial_number": "654fdsd876234", + "capacity_seated": 24, + "capacity_standing": 31, + "number_of_vehicles": 1, + "number_of_doors": 2, + "number_of_door_channels": 3, + "length_mm": 254.78, + "width_mm": 798.0, + "data": { + "foo": "bar" + } + }, + { + "id": "2345-2345", + "integer_id": 23, + "is_enabled": null, + "is_frozen": null, + "internal_id": null, + "color": null, + "agency_id": null, + "garage_id": null, + "line_id": null, + "mode": null, + "manufacturer": null, + "model": null, + "license_number": null, + "serial_number": null, + "capacity_seated": null, + "capacity_standing": null, + "number_of_vehicles": null, + "number_of_doors": null, + "number_of_door_channels": null, + "length_mm": null, + "width_mm": null, + "data": {} + }, + { + "id": "2345-2346", + "integer_id": 24, + "is_enabled": true, + "is_frozen": false, + "internal_id": null, + "color": null, + "agency_id": null, + "garage_id": null, + "line_id": null, + "mode": null, + "manufacturer": null, + "model": null, + "license_number": null, + "serial_number": null, + "capacity_seated": null, + "capacity_standing": null, + "number_of_vehicles": null, + "number_of_doors": null, + "number_of_door_channels": null, + "length_mm": null, + "width_mm": null, + "data": {} + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/units", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "units", + "units", + &config, + &routers::unit_collection_router::write_collection, + &request, + ); + + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "units", + "units", + &config, + &routers::unit_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["units"], json_compare_data["units"]); + + } +} diff --git a/services/json2capnp/src/routers/zone_collection_router.rs b/services/json2capnp/src/routers/zone_collection_router.rs new file mode 100644 index 000000000..6109619c3 --- /dev/null +++ b/services/json2capnp/src/routers/zone_collection_router.rs @@ -0,0 +1,275 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use crate::zoneCollection_capnp::zone_collection as collection; +//use crate::my_error::MyError; +use capnp::serialize_packed; +use serde_json; +use std::io::BufReader; +use geojson::GeoJson; +use geobuf; +use protobuf::Message; + +pub fn write_collection( + json: &serde_json::Value, + file: &mut std::fs::File, + _: &serde_json::Value, +) -> ::std::result::Result<(), capnp::Error> { + let mut message = ::capnp::message::Builder::new_default(); + + let geojson_data : GeoJson = GeoJson::from_json_value((json["zones"]).clone()).unwrap(); + + match geojson_data { + geojson::GeoJson::FeatureCollection(feature_collection) => { + + let features_count = feature_collection.features.len(); + let collection_capnp = message.init_root::(); + let mut capnp = collection_capnp.init_zones(features_count as u32); + for i in 0..features_count { + let feature = &feature_collection.features[i]; + let mut capnp_data = capnp.reborrow().get(i as u32); + let properties = feature.properties.as_ref().unwrap(); + capnp_data.set_uuid(properties.get("id").unwrap().as_str().unwrap()); // required + if !properties.get("integer_id").unwrap_or(&json!(null)).is_null() { // only save integer id if not missing + capnp_data.set_id(properties.get("integer_id").unwrap().as_i64().unwrap() as i32); // required + } + capnp_data.set_data_source_uuid(&crate::utils::optional_string_json_null_to_empty_str(properties.get("data_source_id"))); + capnp_data.set_shortname(&crate::utils::json_null_to_empty_str(&properties.get("shortname").unwrap_or(&json!(null)))); + capnp_data.set_name(&crate::utils::json_null_to_empty_str(&properties.get("name").unwrap_or(&json!(null)))); + capnp_data.set_color(&crate::utils::json_null_to_empty_str(&properties.get("color").unwrap_or(&json!(null)))); + capnp_data.set_internal_id(&crate::utils::json_null_to_empty_str(&properties.get("internal_id").unwrap_or(&json!(null)))); + capnp_data.set_description(&crate::utils::json_null_to_empty_str(&properties.get("description").unwrap_or(&json!(null)))); + capnp_data.set_data(&properties.get("data").unwrap_or(&json!({})).to_string().as_str()); + capnp_data.set_is_frozen(crate::utils::json_boolean_to_i8(&properties.get("is_frozen").unwrap_or(&json!(null)))); + + let geojson_json = json!({ + "type": "Feature", + "properties": {}, + "geometry": feature.geometry.as_ref().unwrap() + }); + let geobuf = geobuf::encode::Encoder::encode(&geojson_json, 6, 2).unwrap().write_to_bytes().unwrap(); + + capnp_data.set_geography(&geobuf); + //capnp_data.set_geography(&geojson_json["geometry"].to_string().as_str()); + + } + serialize_packed::write_message(file, &message) + }, + _ => { + Err(capnp::Error::failed(String::from("Zones geojson is invalid, empty or not a FeatureCollection"))) + } + } + +} + + +pub fn read_collection( + file: &mut std::fs::File, + _ : &serde_json::Value//config: &serde_json::Value, +) -> ::std::result::Result { + + let message_reader = serialize_packed::read_message(BufReader::new(file), ::capnp::message::ReaderOptions::new())?; + let capnp_collection = message_reader.get_root::()?; + + let mut collection_json_vec : Vec = Vec::with_capacity(capnp_collection.get_zones()?.len() as usize); + + for capnp_object in capnp_collection.get_zones()?.iter() { + + let integer_id = capnp_object.get_id() as i32; + let data_attributes : serde_json::Value = serde_json::from_str(capnp_object.get_data()?).unwrap(); + let properties_json : serde_json::Value = json!({ + "id": capnp_object.get_uuid()?, + "integer_id": integer_id, + "data_source_id": crate::utils::empty_str_to_json_null(capnp_object.get_data_source_uuid()?), + "internal_id": crate::utils::empty_str_to_json_null(capnp_object.get_internal_id()?), + "shortname": crate::utils::empty_str_to_json_null(capnp_object.get_shortname()?), + "name": crate::utils::empty_str_to_json_null(capnp_object.get_name()?), + "description": crate::utils::empty_str_to_json_null(capnp_object.get_description()?), + "color": crate::utils::empty_str_to_json_null(capnp_object.get_color()?), + "is_frozen": crate::utils::i8_to_json_boolean(capnp_object.get_is_frozen()), + "data": data_attributes + }); + + let mut geobuf_data = geobuf::geobuf_pb::Data::new(); + + geobuf_data.merge_from_bytes(&capnp_object.get_geography().unwrap()).unwrap(); + let mut geojson : serde_json::Value = geobuf::decode::Decoder::decode(&geobuf_data).unwrap_or(json!({ + "geometry": null + })); + + geojson["id"] = json!(integer_id); + geojson["properties"] = properties_json; + + collection_json_vec.push(geojson); + + } + + Ok(json!({ + "zones": { + "type": "FeatureCollection", + "features": serde_json::Value::Array(collection_json_vec) + } + })) + +} + + +#[cfg(test)] +mod tests { + + use crate::routers; + use std::path::{Path}; + use std::fs; + use rouille::Request; + use pretty_assertions::{assert_eq}; + + #[test] + fn zone_collections() { + + let config: serde_json::Value = json!({ + "project_cache_directory_path": fs::canonicalize(Path::new("test")).unwrap(), + "project_shortname" : "test" + }); + + let data = r##" + { + "zones": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[-76.963302,42.639486],[-75.963302,43.639486],[-74.963302,44.639486],[-76.963302,42.639486]]] + }, + "id": 234, + "properties": { + "id": "215923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "isNew": false, + "foo": "bar" + }, + "shortname": "zone_shortname", + "name": "ZoneName", + "color": "#1F1F1F", + "data_source_id": "13269525-9100-45b3-b00b-67b5d5a3f12d", + "is_frozen": false, + "created_at": "2020-01-01T15:15:15.054321-04:00", + "integer_id": 234, + "updated_at": null, + "description": "description for zone", + "internal_id": "Zone1" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[-72.963302,42.639486],[-71.963302,43.639486],[-70.963302,44.639486],[-72.963302,42.639486]]] + }, + "id": 235, + "properties": { + "id": "115923f9-a768-49e5-81b6-8237d60a6125", + "data_source_id": "63269525-9100-45b3-b00b-67b5d5a3f12d", + "integer_id": 235 + } + } + ] + } + } + "##; + + let compare_data = r##" + { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[-76.963302,42.639486],[-75.963302,43.639486],[-74.963302,44.639486],[-76.963302,42.639486]]] + }, + "id": 234, + "properties": { + "id": "215923f9-a768-49e5-81b6-8237d60a6125", + "data": { + "isNew": false, + "foo": "bar" + }, + "shortname": "zone_shortname", + "name": "ZoneName", + "color": "#1F1F1F", + "data_source_id": "13269525-9100-45b3-b00b-67b5d5a3f12d", + "is_frozen": false, + "integer_id": 234, + "description": "description for zone", + "internal_id": "Zone1" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[-72.963302,42.639486],[-71.963302,43.639486],[-70.963302,44.639486],[-72.963302,42.639486]]] + }, + "id": 235, + "properties": { + "id": "115923f9-a768-49e5-81b6-8237d60a6125", + "data": {}, + "shortname": null, + "name": null, + "color": null, + "data_source_id": "63269525-9100-45b3-b00b-67b5d5a3f12d", + "is_frozen": null, + "integer_id": 235, + "description": null, + "internal_id": null + } + } + ] + } + "##; + + let json_compare_data : serde_json::Value = serde_json::from_str(compare_data).unwrap(); + + let request = Request::fake_http( + "POST", + "/zones", + vec![( + "Content-Type".to_owned(), + "application/json; charset=utf-8".to_owned(), + )], + data.as_bytes().to_vec(), + ); + + let response = routers::write_collection_route( + "zones", + "zones", + &config, + &routers::zone_collection_router::write_collection, + &request, + ); + assert_eq!(response.status_code, 200); + + let response = routers::read_collection_route( + "zones", + "zones", + &config, + &routers::zone_collection_router::read_collection, + ); + + let (mut res_data, _) = response.data.into_reader_and_size(); + let mut buffer = String::new(); + res_data.read_to_string(&mut buffer).unwrap(); + let json_response : serde_json::Value = serde_json::from_str(buffer.as_str()).unwrap(); + + assert_eq!(response.status_code, 200); + assert_eq!(json_response["data"]["zones"], json_compare_data); + + } +} diff --git a/services/json2capnp/src/utils/mod.rs b/services/json2capnp/src/utils/mod.rs new file mode 100644 index 000000000..56b9ed322 --- /dev/null +++ b/services/json2capnp/src/utils/mod.rs @@ -0,0 +1,139 @@ +/* + * Copyright 2022 Polytechnique Montreal and contributors + * + * This software may be used and distributed according to the terms of the + * GNU General Public License version 2 or any later version. + * + */ + +use regex::Regex; + +/*pub fn string_or_null_to_empty_string(input: &std::string::String) -> std::string::String { + if input == "null" { + std::string::String::from("") + } else { + input.clone() + } +}*/ + +pub fn json_null_to_empty_str(input: &serde_json::Value) -> &str { + if input.is_null() { + "" + } else { + input.as_str().unwrap() + } +} + +/*pub fn empty_string_to_null(input: &std::string::String) -> std::string::String { + if input == "" { + String::from("null") + } else { + input.clone() + } +}*/ + +pub fn empty_str_to_json_null(input: &str) -> serde_json::Value { + if input == "" { + json!(null) + } else { + json!(input) + } +} + +/*pub fn string_or_null_to_minus_one(input: &std::string::String) -> std::string::String { + if input == "null" { + std::string::String::from("-1") + } else { + input.clone() + } +}*/ + +pub fn json_value_or_null_to_i64_or_minus_one(input: &serde_json::Value) -> i64 { + match input.as_i64() { + Some(value) => value, + None => -1, + } +} + +pub fn json_value_or_null_to_f64_or_minus_one(input: &serde_json::Value) -> f64 { + match input.as_f64() { + Some(value) => value, + None => -1.0, + } +} + +pub fn minus_one_i64_to_null(input: i64) -> serde_json::Value { + if input == -1 { + json!(null) + } else { + json!(input) + } +} + +pub fn minus_one_f64_to_null(input: f64) -> serde_json::Value { + if input == -1.0 { + json!(null) + } else { + json!(input) + } +} + +pub fn json_boolean_to_i8(input: &serde_json::Value) -> i8 { + match input.as_bool() { + Some(true) => 1, + Some(false) => 0, + None => -1, + } +} + +pub fn i8_to_json_boolean(input: i8) -> serde_json::Value { + match input { + 1 => json!(true), + 0 => json!(false), + -1 => json!(null), + _ => json!(null), + } +} + +pub fn optional_string_json_null_to_empty_str(input: Option<&serde_json::Value>) -> &str { + &json_null_to_empty_str(input.unwrap_or(&json!(null))) +} + +pub fn required_string(input: Option<&serde_json::Value>) -> &str { + &input.unwrap().as_str().unwrap() +} + +pub fn time_str_to_seconds_since_midnight(time_str: &str) -> Option { + let time_regex = Regex::new(r"(\d{2}):(\d{2}):?(\d{2})?").unwrap(); + if !time_regex.is_match(time_str) + { + return None; + } + let splitted_time = time_str.split(":"); + let mut i : u8 = 0; + let mut seconds : u32 = 0; + for s in splitted_time { + if i == 0 // hours + { + seconds += 3600 * s.parse::().unwrap(); + } + else if i == 1 // minutes + { + seconds += 60 * s.parse::().unwrap(); + } + else if i == 2 // seconds (optional) + { + seconds += s.parse::().unwrap(); + } + i += 1; + } + Some(seconds) +} + +pub fn seconds_since_midnight_to_time_str(&seconds_since_midnight: &u32) -> String { + let hours = seconds_since_midnight/3600; + let minutes = (seconds_since_midnight - hours * 3600)/60; + let seconds = seconds_since_midnight - hours * 3600 - minutes * 60; + let time_string = if seconds == 0 { format!("{:02}:{:02}", hours, minutes) } else { format!("{:02}:{:02}:{:02}", hours, minutes, seconds) }; + time_string +} \ No newline at end of file diff --git a/services/json2capnp/test/.gitkeep b/services/json2capnp/test/.gitkeep new file mode 100644 index 000000000..e69de29bb