From 72e64e3e66f47814eee0996551340190f0742c5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jul 2026 05:06:11 +0000 Subject: [PATCH 1/2] chore(deps): bump the rust-dependencies group across 1 directory with 34 updates Bumps the rust-dependencies group with 34 updates in the /rsworkspace directory: | Package | From | To | | --- | --- | --- | | [rmcp](https://github.com/modelcontextprotocol/rust-sdk) | `2.0.0` | `2.1.0` | | [async-nats](https://github.com/nats-io/nats.rs) | `0.49.0` | `0.49.1` | | [bytes](https://github.com/tokio-rs/bytes) | `1.11.1` | `1.12.0` | | [buffa](https://github.com/anthropics/buffa) | `0.7.0` | `0.8.1` | | [buffa-types](https://github.com/anthropics/buffa) | `0.7.0` | `0.8.1` | | [tokio](https://github.com/tokio-rs/tokio) | `1.52.1` | `1.52.3` | | [tower-http](https://github.com/tower-rs/tower-http) | `0.6.8` | `0.7.0` | | [sqlx](https://github.com/launchbadge/sqlx) | `0.8.6` | `0.9.0` | | [serde_json](https://github.com/serde-rs/json) | `1.0.149` | `1.0.150` | | [jsonschema](https://github.com/Stranger6667/jsonschema) | `0.46.5` | `0.46.9` | | [anyhow](https://github.com/dtolnay/anyhow) | `1.0.102` | `1.0.103` | | [moka](https://github.com/moka-rs/moka) | `0.12.10` | `0.12.15` | | [toml](https://github.com/toml-rs/toml) | `0.8.23` | `1.1.2+spec-1.1.0` | | [http](https://github.com/hyperium/http) | `1.4.0` | `1.4.2` | | [sha2](https://github.com/RustCrypto/hashes) | `0.10.8` | `0.11.0` | | [wiremock](https://github.com/LukeMathWalker/wiremock-rs) | `0.6.3` | `0.6.5` | | [filetime](https://github.com/alexcrichton/filetime) | `0.2.27` | `0.2.29` | | [time](https://github.com/time-rs/time) | `0.3.47` | `0.3.53` | | [uuid](https://github.com/uuid-rs/uuid) | `1.23.1` | `1.23.4` | | [hmac](https://github.com/RustCrypto/MACs) | `0.12.1` | `0.13.0` | | [jsonwebtoken](https://github.com/Keats/jsonwebtoken) | `10.3.0` | `10.4.0` | | [rustls-pki-types](https://github.com/rustls/pki-types) | `1.14.0` | `1.15.0` | | [x509-parser](https://github.com/rusticata/x509-parser) | `0.16.0` | `0.18.1` | | [data-encoding](https://github.com/ia0/data-encoding) | `2.10.0` | `2.11.0` | | [rand_core](https://github.com/rust-random/rand_core) | `0.6.4` | `0.10.1` | | [rcgen](https://github.com/rustls/rcgen) | `0.13.2` | `0.14.8` | | [testcontainers](https://github.com/testcontainers/testcontainers-rs) | `0.27.0` | `0.27.3` | | [pkcs8](https://github.com/RustCrypto/formats) | `0.10.2` | `0.11.0` | | [trybuild](https://github.com/dtolnay/trybuild) | `1.0.116` | `1.0.117` | | [quote](https://github.com/dtolnay/quote) | `1.0.45` | `1.0.46` | | [syn](https://github.com/dtolnay/syn) | `2.0.117` | `2.0.118` | | [chrono](https://github.com/chronotope/chrono) | `0.4.44` | `0.4.45` | | [cron](https://github.com/zslayton/cron) | `0.15.0` | `0.17.0` | | [bytesize](https://github.com/bytesize-rs/bytesize) | `2.3.1` | `2.4.0` | Updates `rmcp` from 2.0.0 to 2.1.0 - [Release notes](https://github.com/modelcontextprotocol/rust-sdk/releases) - [Changelog](https://github.com/modelcontextprotocol/rust-sdk/blob/main/release-plz.toml) - [Commits](https://github.com/modelcontextprotocol/rust-sdk/compare/rmcp-v2.0.0...rmcp-v2.1.0) Updates `async-nats` from 0.49.0 to 0.49.1 - [Release notes](https://github.com/nats-io/nats.rs/releases) - [Commits](https://github.com/nats-io/nats.rs/compare/async-nats/v0.49.0...async-nats/v0.49.1) Updates `bytes` from 1.11.1 to 1.12.0 - [Release notes](https://github.com/tokio-rs/bytes/releases) - [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/bytes/compare/v1.11.1...v1.12.0) Updates `buffa` from 0.7.0 to 0.8.1 - [Release notes](https://github.com/anthropics/buffa/releases) - [Changelog](https://github.com/anthropics/buffa/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/buffa/compare/v0.7.0...v0.8.1) Updates `buffa-types` from 0.7.0 to 0.8.1 - [Release notes](https://github.com/anthropics/buffa/releases) - [Changelog](https://github.com/anthropics/buffa/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/buffa/compare/v0.7.0...v0.8.1) Updates `tokio` from 1.52.1 to 1.52.3 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.1...tokio-1.52.3) Updates `tower-http` from 0.6.8 to 0.7.0 - [Release notes](https://github.com/tower-rs/tower-http/releases) - [Commits](https://github.com/tower-rs/tower-http/compare/tower-http-0.6.8...tower-http-0.7.0) Updates `sqlx` from 0.8.6 to 0.9.0 - [Changelog](https://github.com/transact-rs/sqlx/blob/main/CHANGELOG.md) - [Commits](https://github.com/launchbadge/sqlx/compare/v0.8.6...v0.9.0) Updates `serde_json` from 1.0.149 to 1.0.150 - [Release notes](https://github.com/serde-rs/json/releases) - [Commits](https://github.com/serde-rs/json/compare/v1.0.149...v1.0.150) Updates `jsonschema` from 0.46.5 to 0.46.9 - [Release notes](https://github.com/Stranger6667/jsonschema/releases) - [Changelog](https://github.com/Stranger6667/jsonschema/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stranger6667/jsonschema/compare/cli-v0.46.5...ruby-v0.46.9) Updates `anyhow` from 1.0.102 to 1.0.103 - [Release notes](https://github.com/dtolnay/anyhow/releases) - [Commits](https://github.com/dtolnay/anyhow/compare/1.0.102...1.0.103) Updates `moka` from 0.12.10 to 0.12.15 - [Release notes](https://github.com/moka-rs/moka/releases) - [Changelog](https://github.com/moka-rs/moka/blob/main/CHANGELOG.md) - [Commits](https://github.com/moka-rs/moka/compare/v0.12.10...v0.12.15) Updates `toml` from 0.8.23 to 1.1.2+spec-1.1.0 - [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.23...toml-v1.1.2) Updates `http` from 1.4.0 to 1.4.2 - [Release notes](https://github.com/hyperium/http/releases) - [Changelog](https://github.com/hyperium/http/blob/master/CHANGELOG.md) - [Commits](https://github.com/hyperium/http/compare/v1.4.0...v1.4.2) Updates `sha2` from 0.10.8 to 0.11.0 - [Commits](https://github.com/RustCrypto/hashes/compare/sha2-v0.10.8...sha2-v0.11.0) Updates `wiremock` from 0.6.3 to 0.6.5 - [Changelog](https://github.com/LukeMathWalker/wiremock-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/LukeMathWalker/wiremock-rs/compare/v0.6.3...v0.6.5) Updates `filetime` from 0.2.27 to 0.2.29 - [Commits](https://github.com/alexcrichton/filetime/compare/0.2.27...0.2.29) Updates `time` from 0.3.47 to 0.3.53 - [Release notes](https://github.com/time-rs/time/releases) - [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md) - [Commits](https://github.com/time-rs/time/compare/v0.3.47...v0.3.53) Updates `uuid` from 1.23.1 to 1.23.4 - [Release notes](https://github.com/uuid-rs/uuid/releases) - [Commits](https://github.com/uuid-rs/uuid/compare/v1.23.1...v1.23.4) Updates `hmac` from 0.12.1 to 0.13.0 - [Commits](https://github.com/RustCrypto/MACs/compare/hmac-v0.12.1...hmac-v0.13.0) Updates `jsonwebtoken` from 10.3.0 to 10.4.0 - [Changelog](https://github.com/Keats/jsonwebtoken/blob/master/CHANGELOG.md) - [Commits](https://github.com/Keats/jsonwebtoken/compare/v10.3.0...v10.4.0) Updates `rustls-pki-types` from 1.14.0 to 1.15.0 - [Release notes](https://github.com/rustls/pki-types/releases) - [Commits](https://github.com/rustls/pki-types/compare/v/1.14.0...v/1.15.0) Updates `x509-parser` from 0.16.0 to 0.18.1 - [Changelog](https://github.com/rusticata/x509-parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/rusticata/x509-parser/commits) Updates `data-encoding` from 2.10.0 to 2.11.0 - [Commits](https://github.com/ia0/data-encoding/compare/v2.10.0...v2.11.0) Updates `rand_core` from 0.6.4 to 0.10.1 - [Release notes](https://github.com/rust-random/rand_core/releases) - [Changelog](https://github.com/rust-random/rand_core/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-random/rand_core/compare/v0.6.4...v0.10.1) Updates `rcgen` from 0.13.2 to 0.14.8 - [Release notes](https://github.com/rustls/rcgen/releases) - [Commits](https://github.com/rustls/rcgen/compare/v0.13.2...v0.14.8) Updates `testcontainers` from 0.27.0 to 0.27.3 - [Release notes](https://github.com/testcontainers/testcontainers-rs/releases) - [Changelog](https://github.com/testcontainers/testcontainers-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/testcontainers/testcontainers-rs/compare/0.27.0...0.27.3) Updates `pkcs8` from 0.10.2 to 0.11.0 - [Commits](https://github.com/RustCrypto/formats/compare/pkcs8/v0.10.2...pkcs8/v0.11.0) Updates `trybuild` from 1.0.116 to 1.0.117 - [Release notes](https://github.com/dtolnay/trybuild/releases) - [Commits](https://github.com/dtolnay/trybuild/compare/1.0.116...1.0.117) Updates `quote` from 1.0.45 to 1.0.46 - [Release notes](https://github.com/dtolnay/quote/releases) - [Commits](https://github.com/dtolnay/quote/compare/1.0.45...1.0.46) Updates `syn` from 2.0.117 to 2.0.118 - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/2.0.117...2.0.118) Updates `chrono` from 0.4.44 to 0.4.45 - [Release notes](https://github.com/chronotope/chrono/releases) - [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md) - [Commits](https://github.com/chronotope/chrono/compare/v0.4.44...v0.4.45) Updates `cron` from 0.15.0 to 0.17.0 - [Release notes](https://github.com/zslayton/cron/releases) - [Commits](https://github.com/zslayton/cron/commits) Updates `bytesize` from 2.3.1 to 2.4.0 - [Release notes](https://github.com/bytesize-rs/bytesize/releases) - [Changelog](https://github.com/bytesize-rs/bytesize/blob/master/CHANGELOG.md) - [Commits](https://github.com/bytesize-rs/bytesize/compare/bytesize-v2.3.1...bytesize-v2.4.0) --- updated-dependencies: - dependency-name: rmcp dependency-version: 2.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: async-nats dependency-version: 0.49.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: bytes dependency-version: 1.12.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: buffa dependency-version: 0.8.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: buffa-types dependency-version: 0.8.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: tokio dependency-version: 1.52.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: tower-http dependency-version: 0.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: sqlx dependency-version: 0.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: serde_json dependency-version: 1.0.150 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: jsonschema dependency-version: 0.46.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: anyhow dependency-version: 1.0.103 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: moka dependency-version: 0.12.15 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: toml dependency-version: 1.1.2+spec-1.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: rust-dependencies - dependency-name: http dependency-version: 1.4.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: sha2 dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: wiremock dependency-version: 0.6.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: filetime dependency-version: 0.2.29 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: time dependency-version: 0.3.53 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: uuid dependency-version: 1.23.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: hmac dependency-version: 0.13.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: jsonwebtoken dependency-version: 10.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: rustls-pki-types dependency-version: 1.15.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: x509-parser dependency-version: 0.18.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: data-encoding dependency-version: 2.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: rand_core dependency-version: 0.10.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: rcgen dependency-version: 0.14.8 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: testcontainers dependency-version: 0.27.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: pkcs8 dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: trybuild dependency-version: 1.0.117 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: quote dependency-version: 1.0.46 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: syn dependency-version: 2.0.118 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: chrono dependency-version: 0.4.45 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: cron dependency-version: 0.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: bytesize dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies ... Signed-off-by: dependabot[bot] --- rsworkspace/Cargo.lock | 858 ++++++++---------- rsworkspace/Cargo.toml | 44 +- .../crates/a2a-auth-callout/Cargo.toml | 10 +- rsworkspace/crates/a2a-gateway/Cargo.toml | 4 +- .../crates/trogon-aauth-verify/Cargo.toml | 6 +- .../crates/trogon-scheduler-domain/Cargo.toml | 2 +- .../crates/trogon-scheduler/Cargo.toml | 2 +- 7 files changed, 408 insertions(+), 518 deletions(-) diff --git a/rsworkspace/Cargo.lock b/rsworkspace/Cargo.lock index 3b5a0a2d0..d76050672 100644 --- a/rsworkspace/Cargo.lock +++ b/rsworkspace/Cargo.lock @@ -12,11 +12,11 @@ dependencies = [ "data-encoding", "futures", "hex", - "hmac 0.12.1", + "hmac 0.13.0", "jsonwebtoken", "nats-jwt-rs", "nkeys", - "rand_core 0.6.4", + "rand_core 0.10.1", "rcgen", "reqwest 0.12.28", "rsa", @@ -25,7 +25,7 @@ dependencies = [ "rustls-webpki", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "tempfile", "testcontainers", "thiserror 2.0.18", @@ -82,17 +82,17 @@ dependencies = [ "jsonwebtoken", "nkeys", "p256", - "rand_core 0.6.4", + "rand_core 0.10.1", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "spicedb-grpc-tonic", "tempfile", "thiserror 2.0.18", "time", "tokio", "tokio-util", - "toml 0.8.23", + "toml 1.1.2+spec-1.1.0", "tonic", "tracing", "tracing-subscriber", @@ -145,7 +145,7 @@ dependencies = [ "reqwest 0.12.28", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "spicedb-grpc-tonic", "thiserror 2.0.18", "time", @@ -184,7 +184,7 @@ dependencies = [ "tokio", "tokio-tungstenite", "tower", - "tower-http", + "tower-http 0.7.0", "tracing", "tracing-subscriber", "trogon-nats", @@ -247,10 +247,10 @@ dependencies = [ "hex", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "tempfile", "thiserror 2.0.18", - "toml 0.8.23", + "toml 1.1.2+spec-1.1.0", "tracing", "wasmtime", ] @@ -528,9 +528,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "arbitrary" @@ -546,7 +546,7 @@ dependencies = [ "jsonschema", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "thiserror 2.0.18", "time", "url", @@ -575,15 +575,15 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tower", - "tower-http", + "tower-http 0.7.0", "url", ] [[package]] name = "asn1-rs" -version = "0.6.2" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -591,15 +591,15 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", ] [[package]] name = "asn1-rs-derive" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", @@ -630,15 +630,15 @@ dependencies = [ [[package]] name = "astral-tokio-tar" -version = "0.5.6" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec179a06c1769b1e42e1e2cbe74c7dcdb3d6383c838454d063eaac5bbb7ebbe5" +checksum = "08648fef353ab39a9d26f909ad53fc4f071be4c91853b78523f5cc3d9e5ebffd" dependencies = [ - "filetime", "futures-core", "libc", "portable-atomic", "rustc-hash", + "rustix 0.38.44", "tokio", "tokio-stream", "xattr", @@ -694,9 +694,9 @@ dependencies = [ [[package]] name = "async-nats" -version = "0.49.0" +version = "0.49.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "407486109ea5cfdf53fde05f46996dadf0547518a4d49f050d25f405ae31ed2d" +checksum = "fad3cd6df81292728e2a8cb1f1dcb4d7e7a1ab59b80c14fbbcba2baf9d5cf86a" dependencies = [ "base64", "bytes", @@ -829,7 +829,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sha1", + "sha1 0.10.6", "sync_wrapper", "tokio", "tokio-tungstenite", @@ -888,7 +888,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] [[package]] @@ -897,6 +897,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bit-vec" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "2.13.0" @@ -1004,16 +1013,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c" -[[package]] -name = "borsh" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" -dependencies = [ - "bytes", - "cfg_aliases", -] - [[package]] name = "brotli" version = "8.0.4" @@ -1046,27 +1045,27 @@ dependencies = [ [[package]] name = "buffa" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6bfcf26f959599a1501e632486d1d5d9db5ecb18905c01b83061019b473e115" +checksum = "33f29a40702df4b86ccd84211bfde8cee0bce6d0811450ade4a86a7d0958a23a" dependencies = [ "base64", "bytes", - "compact_str", - "ecow", + "foldhash 0.1.5", "hashbrown 0.15.5", "once_cell", + "rustversion", "serde", "serde_json", - "smol_str", + "smoothutf8", "thiserror 2.0.18", ] [[package]] name = "buffa-types" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3056f933af716224d8c1e842a2937f47fe6b996dba549ed8e761c400deccf86" +checksum = "22cb54bcbf6946c58e550eeaf6209047146363dbc7cbdc87e49e67089ed2ff5f" dependencies = [ "buffa", "bytes", @@ -1098,27 +1097,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" dependencies = [ "serde", ] [[package]] name = "bytesize" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3" - -[[package]] -name = "castaway" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" -dependencies = [ - "rustversion", -] +checksum = "49e78e506b9d7633710dab98996f22f95f3d0f488e8f1aa162830556ed9fc14d" [[package]] name = "cc" @@ -1182,9 +1172,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "js-sys", @@ -1201,7 +1191,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" dependencies = [ "chrono", - "phf", + "phf 0.12.1", ] [[package]] @@ -1295,21 +1285,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "compact_str" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "rustversion", - "ryu", - "serde", - "static_assertions", -] - [[package]] name = "compression-codecs" version = "0.4.38" @@ -1502,7 +1477,7 @@ dependencies = [ "rustc-hash", "serde", "serde_derive", - "sha2 0.10.8", + "sha2 0.10.9", "smallvec", "target-lexicon", "wasmtime-internal-core", @@ -1610,13 +1585,14 @@ dependencies = [ [[package]] name = "cron" -version = "0.15.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5877d3fbf742507b66bc2a1945106bd30dd8504019d596901ddd012a4dd01740" +checksum = "a5dcd6f69605c2956916ce24e8af637b754964c9a83f4662d3a2361654cdba09" dependencies = [ "chrono", "once_cell", - "winnow 0.6.26", + "phf 0.11.3", + "winnow 0.7.15", ] [[package]] @@ -1830,18 +1806,18 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "deadpool" -version = "0.10.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" dependencies = [ - "async-trait", "deadpool-runtime", + "lazy_static", "num_cpus", "tokio", ] @@ -1868,15 +1844,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid 0.9.6", - "pem-rfc7468", + "pem-rfc7468 0.7.0", + "zeroize", +] + +[[package]] +name = "der" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" +dependencies = [ + "const-oid 0.10.2", + "pem-rfc7468 1.0.0", "zeroize", ] [[package]] name = "der-parser" -version = "9.0.0" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" dependencies = [ "asn1-rs", "displaydoc", @@ -1892,7 +1879,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -2041,21 +2027,12 @@ version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der", + "der 0.7.10", "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", - "spki", -] - -[[package]] -name = "ecow" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78e4f79b296fbaab6ce2e22d52cb4c7f010fe0ebe7a32e34fa25885fd797bd02" -dependencies = [ - "serde", + "spki 0.7.3", ] [[package]] @@ -2064,7 +2041,7 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8", + "pkcs8 0.10.2", "signature", ] @@ -2078,7 +2055,7 @@ dependencies = [ "ed25519", "rand_core 0.6.4", "serde", - "sha2 0.10.8", + "sha2 0.10.9", "signature", "subtle", "zeroize", @@ -2105,9 +2082,9 @@ dependencies = [ "ff", "generic-array", "group", - "hkdf", - "pem-rfc7468", - "pkcs8", + "hkdf 0.12.4", + "pem-rfc7468 0.7.0", + "pkcs8 0.10.2", "rand_core 0.6.4", "sec1", "subtle", @@ -2160,17 +2137,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - [[package]] name = "etcetera" version = "0.11.0" @@ -2221,12 +2187,12 @@ checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "ferroid" -version = "0.8.9" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb330bbd4cb7a5b9f559427f06f98a4f853a137c8298f3bd3f8ca57663e21986" +checksum = "ee93edf3c501f0035bbeffeccfed0b79e14c311f12195ec0e661e114a0f60da4" dependencies = [ "portable-atomic", - "rand 0.9.2", + "rand 0.10.1", "web-time", ] @@ -2248,13 +2214,12 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" dependencies = [ "cfg-if", "libc", - "libredox", ] [[package]] @@ -2298,9 +2263,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ "futures-core", "futures-sink", @@ -2463,21 +2428,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "generator" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b854b0e584ead1a33f18b2fcad7cf7be18b3875c78816b753639aa501513ae" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows-link", - "windows-result", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -2590,8 +2540,6 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", "foldhash 0.1.5", "serde", ] @@ -2620,11 +2568,11 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -2654,6 +2602,15 @@ dependencies = [ "hmac 0.12.1", ] +[[package]] +name = "hkdf" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" +dependencies = [ + "hmac 0.13.0", +] + [[package]] name = "hmac" version = "0.12.1" @@ -2683,9 +2640,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" dependencies = [ "bytes", "itoa", @@ -3017,16 +2974,6 @@ version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -[[package]] -name = "iri-string" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -3155,9 +3102,9 @@ dependencies = [ [[package]] name = "jsonschema" -version = "0.46.5" +version = "0.46.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5fe5206f06e589caf25e79fc05ccdf91fca745685fe9fe1a13bbdfb479a631" +checksum = "1d865ca7ca04445fcaa1d751fda3dc43b0113ba2fcddc65d5a0fcb474a7c3bba" dependencies = [ "ahash", "bytecount", @@ -3168,23 +3115,32 @@ dependencies = [ "getrandom 0.3.4", "idna", "itoa", + "jsonschema-regex", "num-cmp", "num-traits", "percent-encoding", "referencing", "regex", - "regex-syntax", "serde", "serde_json", "unicode-general-category", "uuid-simd", ] +[[package]] +name = "jsonschema-regex" +version = "0.46.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b7fc96cd6677cc81b00607d43477327d719419937ef1c44b3556a40f517d54c" +dependencies = [ + "regex-syntax", +] + [[package]] name = "jsonwebtoken" -version = "10.3.0" +version = "10.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" +checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" dependencies = [ "base64", "ed25519-dalek", @@ -3198,9 +3154,10 @@ dependencies = [ "rsa", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.10.9", "signature", "simple_asn1", + "zeroize", ] [[package]] @@ -3236,10 +3193,7 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags", "libc", - "plain", - "redox_syscall 0.8.1", ] [[package]] @@ -3252,6 +3206,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -3279,19 +3239,6 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - [[package]] name = "lru-slab" version = "0.1.2" @@ -3388,12 +3335,12 @@ dependencies = [ [[package]] name = "md-5" -version = "0.10.6" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest 0.11.2", ] [[package]] @@ -3408,7 +3355,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix", + "rustix 1.1.4", ] [[package]] @@ -3452,23 +3399,21 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.10" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" dependencies = [ "async-lock", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", + "equivalent", "event-listener", "futures-util", - "loom", "parking_lot", "portable-atomic", - "rustc_version", "smallvec", "tagptr", - "thiserror 1.0.69", "uuid", ] @@ -3502,7 +3447,7 @@ dependencies = [ "nkeys", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -3597,9 +3542,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -3666,9 +3611,9 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" dependencies = [ "asn1-rs", ] @@ -3809,7 +3754,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -3821,7 +3766,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "primeorder", - "sha2 0.10.8", + "sha2 0.10.9", ] [[package]] @@ -3848,7 +3793,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -3909,6 +3854,15 @@ dependencies = [ "base64ct", ] +[[package]] +name = "pem-rfc7468" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -3936,13 +3890,55 @@ dependencies = [ "indexmap 2.14.0", ] +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared 0.11.3", +] + [[package]] name = "phf" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" dependencies = [ - "phf_shared", + "phf_shared 0.12.1", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.6", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", ] [[package]] @@ -3986,9 +3982,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der", - "pkcs8", - "spki", + "der 0.7.10", + "pkcs8 0.10.2", + "spki 0.7.3", ] [[package]] @@ -3997,21 +3993,25 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der", - "spki", + "der 0.7.10", + "spki 0.7.3", ] [[package]] -name = "pkg-config" -version = "0.3.33" +name = "pkcs8" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" +dependencies = [ + "der 0.8.0", + "spki 0.8.0", +] [[package]] -name = "plain" -version = "0.2.3" +name = "pkg-config" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "poly1305" @@ -4101,7 +4101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", - "bit-vec", + "bit-vec 0.8.0", "bitflags", "num-traits", "rand 0.9.2", @@ -4273,9 +4273,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -4399,14 +4399,15 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.13.2" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +checksum = "57f6d249aad744e274e682777a50283a225a32705394ee6d5fcc01efa25e4055" dependencies = [ "pem", "ring", "rustls-pki-types", "time", + "x509-parser", "yasna", ] @@ -4419,15 +4420,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_syscall" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" -dependencies = [ - "bitflags", -] - [[package]] name = "redox_users" version = "0.4.6" @@ -4461,9 +4453,9 @@ dependencies = [ [[package]] name = "referencing" -version = "0.46.5" +version = "0.46.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e4e17ef386c5383591d07623d3de49cbc601156e7582973e6db98d66a57de2" +checksum = "77954d81b2e1c5e8ab889f9f597a92f852ab073255de9e37ee3fb443efd57051" dependencies = [ "ahash", "fluent-uri", @@ -4551,7 +4543,7 @@ dependencies = [ "tokio-rustls", "tokio-util", "tower", - "tower-http", + "tower-http 0.6.11", "tower-service", "url", "wasm-bindgen", @@ -4590,7 +4582,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower", - "tower-http", + "tower-http 0.6.11", "tower-service", "url", "wasm-bindgen", @@ -4624,9 +4616,9 @@ dependencies = [ [[package]] name = "rmcp" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52d21e5b342699bc4de690e6104fc4e43255e4e8420ff0f2cbb963aac09da6f" +checksum = "f00a32c3b81b7b254076a65abd5ab2551209146713ba38f73818657e865e9433" dependencies = [ "async-trait", "bytes", @@ -4676,10 +4668,10 @@ dependencies = [ "num-integer", "num-traits", "pkcs1", - "pkcs8", + "pkcs8 0.10.2", "rand_core 0.6.4", "signature", - "spki", + "spki 0.7.3", "subtle", "zeroize", ] @@ -4714,6 +4706,19 @@ dependencies = [ "nom", ] +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.52.0", +] + [[package]] name = "rustix" version = "1.1.4" @@ -4723,7 +4728,7 @@ dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] @@ -4766,9 +4771,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ "web-time", "zeroize", @@ -4902,12 +4907,6 @@ dependencies = [ "syn", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -4921,9 +4920,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", - "der", + "der 0.7.10", "generic-array", - "pkcs8", + "pkcs8 0.10.2", "subtle", "zeroize", ] @@ -5014,9 +5013,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -5056,15 +5055,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - [[package]] name = "serde_spanned" version = "1.1.1" @@ -5142,6 +5132,17 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", +] + [[package]] name = "sha1_smol" version = "1.0.1" @@ -5150,9 +5151,9 @@ checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures 0.2.17", @@ -5201,7 +5202,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31" dependencies = [ - "pkcs8", + "pkcs8 0.10.2", "rand_core 0.6.4", "signature", "zeroize", @@ -5273,13 +5274,12 @@ dependencies = [ ] [[package]] -name = "smol_str" -version = "0.3.2" +name = "smoothutf8" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" +checksum = "36358427d32ecdb1624616deed99eccfef0a167fe5bf40ddb51efe6980bc1ec8" dependencies = [ - "borsh", - "serde", + "simdutf8", ] [[package]] @@ -5322,14 +5322,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der", + "der 0.7.10", +] + +[[package]] +name = "spki" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" +dependencies = [ + "base64ct", + "der 0.8.0", ] [[package]] name = "sqlx" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71" dependencies = [ "sqlx-core", "sqlx-macros", @@ -5340,12 +5350,13 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ "base64", "bytes", + "cfg-if", "chrono", "crc", "crossbeam-queue", @@ -5355,16 +5366,15 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "hashlink", "indexmap 2.14.0", "log", "memchr", - "once_cell", "percent-encoding", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.10.9", "smallvec", "thiserror 2.0.18", "tokio", @@ -5375,9 +5385,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf" dependencies = [ "proc-macro2", "quote", @@ -5388,77 +5398,62 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3" dependencies = [ + "cfg-if", "dotenvy", "either", "heck", "hex", - "once_cell", "proc-macro2", "quote", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.10.9", "sqlx-core", "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", "syn", + "thiserror 2.0.18", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27" dependencies = [ - "atoi", - "base64", "bitflags", "byteorder", "bytes", "chrono", "crc", - "digest 0.10.7", + "digest 0.11.2", "dotenvy", "either", - "futures-channel", "futures-core", - "futures-io", "futures-util", "generic-array", - "hex", - "hkdf", - "hmac 0.12.1", - "itoa", "log", - "md-5", - "memchr", - "once_cell", "percent-encoding", - "rand 0.8.6", - "rsa", "serde", - "sha1", - "sha2 0.10.8", - "smallvec", + "sha1 0.11.0", + "sha2 0.11.0", "sqlx-core", - "stringprep", "thiserror 2.0.18", "tracing", - "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" dependencies = [ "atoi", "base64", @@ -5467,23 +5462,21 @@ dependencies = [ "chrono", "crc", "dotenvy", - "etcetera 0.8.0", + "etcetera", "futures-channel", "futures-core", "futures-util", "hex", - "hkdf", - "hmac 0.12.1", - "home", + "hkdf 0.13.0", + "hmac 0.13.0", "itoa", "log", "md-5", "memchr", - "once_cell", - "rand 0.8.6", + "rand 0.10.1", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "smallvec", "sqlx-core", "stringprep", @@ -5494,13 +5487,14 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +checksum = "488e99c397a62007e4229aec669a179816339afc6d2620ca6fa420dbee2e982c" dependencies = [ "atoi", "chrono", "flume", + "form_urlencoded", "futures-channel", "futures-core", "futures-executor", @@ -5510,7 +5504,6 @@ dependencies = [ "log", "percent-encoding", "serde", - "serde_urlencoded", "sqlx-core", "thiserror 2.0.18", "tracing", @@ -5536,12 +5529,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "stringprep" version = "0.1.5" @@ -5611,9 +5598,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -5667,7 +5654,7 @@ dependencies = [ "fastrand", "getrandom 0.4.2", "once_cell", - "rustix", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -5682,9 +5669,9 @@ dependencies = [ [[package]] name = "testcontainers" -version = "0.27.0" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fdcea723c64cc08dbc533b3761e345a15bf1222cbe6cb611de09b43f17a168" +checksum = "bfd5785b5483672915ed5fe3cddf9f546802779fc1eceff0a6fb7321fac81c1e" dependencies = [ "astral-tokio-tar", "async-trait", @@ -5692,7 +5679,7 @@ dependencies = [ "bytes", "docker_credential", "either", - "etcetera 0.11.0", + "etcetera", "ferroid", "futures", "http", @@ -5771,12 +5758,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde_core", @@ -5786,15 +5772,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -5827,9 +5813,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.1" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -5946,18 +5932,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit", -] - [[package]] name = "toml" version = "0.9.12+spec-1.1.0" @@ -5966,7 +5940,7 @@ checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap 2.14.0", "serde_core", - "serde_spanned 1.1.1", + "serde_spanned", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", @@ -5981,22 +5955,13 @@ checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ "indexmap 2.14.0", "serde_core", - "serde_spanned 1.1.1", + "serde_spanned", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", "winnow 1.0.1", ] -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -6015,20 +5980,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.14.0", - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_write", - "winnow 0.7.15", -] - [[package]] name = "toml_parser" version = "1.1.2+spec-1.1.0" @@ -6038,12 +5989,6 @@ dependencies = [ "winnow 1.0.1", ] -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - [[package]] name = "toml_writer" version = "1.1.1+spec-1.1.0" @@ -6139,22 +6084,38 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-http" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b11f75e912b0c2be01b63d8cf8057b8c3f97cf34abb3d431a3a4c8675498e233" dependencies = [ "async-compression", "bitflags", "bytes", "futures-core", - "futures-util", "http", "http-body", - "iri-string", + "percent-encoding", "pin-project-lite", "tokio", "tokio-util", - "tower", "tower-layer", "tower-service", "tracing", @@ -6272,11 +6233,11 @@ dependencies = [ "ed25519-dalek", "jsonwebtoken", "p256", - "pkcs8", - "rand_core 0.6.4", + "pkcs8 0.11.0", + "rand_core 0.10.1", "serde", "serde_json", - "sha2 0.10.8", + "sha2 0.11.0", "thiserror 2.0.18", "time", "tokio", @@ -6585,7 +6546,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tower", - "tower-http", + "tower-http 0.7.0", "tracing", "tracing-opentelemetry", "trogon-semconv", @@ -6630,9 +6591,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c635f0191bd3a2941013e5062667100969f8c4e9cd787c14f977265d73616e" +checksum = "0710d4dfbeae4f9c390baa784c49858a7468fa433f3fe5d0ec5ebef651cf59f9" dependencies = [ "glob", "serde", @@ -6667,7 +6628,7 @@ dependencies = [ "rand 0.9.2", "rustls", "rustls-pki-types", - "sha1", + "sha1 0.10.6", "thiserror 2.0.18", ] @@ -6870,9 +6831,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -6966,12 +6927,6 @@ dependencies = [ "wit-bindgen 0.51.0", ] -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" version = "0.2.117" @@ -7186,7 +7141,7 @@ dependencies = [ "postcard", "pulley-interpreter", "rayon", - "rustix", + "rustix 1.1.4", "semver", "serde", "serde_derive", @@ -7234,7 +7189,7 @@ dependencies = [ "semver", "serde", "serde_derive", - "sha2 0.10.8", + "sha2 0.10.9", "smallvec", "target-lexicon", "wasm-encoder 0.251.0", @@ -7254,10 +7209,10 @@ dependencies = [ "directories-next", "log", "postcard", - "rustix", + "rustix 1.1.4", "serde", "serde_derive", - "sha2 0.10.8", + "sha2 0.10.9", "toml 0.9.12+spec-1.1.0", "wasmtime-environ", "windows-sys 0.61.2", @@ -7333,7 +7288,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "rustix", + "rustix 1.1.4", "wasmtime-environ", "wasmtime-internal-versioned-export-macros", "windows-sys 0.61.2", @@ -7347,7 +7302,7 @@ checksum = "9f667288cb4dfa68a4639ffac4d5628535dda64ebdc2b990526efb12b30ba803" dependencies = [ "cc", "object", - "rustix", + "rustix 1.1.4", "wasmtime-internal-versioned-export-macros", ] @@ -7471,13 +7426,9 @@ dependencies = [ [[package]] name = "whoami" -version = "1.6.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", -] +checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" [[package]] name = "winapi" @@ -7569,15 +7520,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -7605,21 +7547,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -7653,12 +7580,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -7671,12 +7592,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -7689,12 +7604,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -7719,12 +7628,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -7737,12 +7640,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -7755,12 +7652,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -7773,12 +7664,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -7791,15 +7676,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winnow" -version = "0.6.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.15" @@ -7817,12 +7693,11 @@ checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" [[package]] name = "wiremock" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "101681b74cd87b5899e87bcf5a64e83334dd313fcd3053ea72e6dba18928e301" +checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" dependencies = [ "assert-json-diff", - "async-trait", "base64", "deadpool", "futures", @@ -8026,9 +7901,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "x509-parser" -version = "0.16.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" dependencies = [ "asn1-rs", "data-encoding", @@ -8038,7 +7913,7 @@ dependencies = [ "oid-registry", "ring", "rusticata-macros", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", ] @@ -8049,15 +7924,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix", + "rustix 1.1.4", ] [[package]] name = "yasna" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282" dependencies = [ + "bit-vec 0.9.1", "time", ] @@ -8130,6 +8006,20 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "zerotrie" diff --git a/rsworkspace/Cargo.toml b/rsworkspace/Cargo.toml index 1d326f281..d95cdca05 100644 --- a/rsworkspace/Cargo.toml +++ b/rsworkspace/Cargo.toml @@ -60,29 +60,29 @@ rmcp = { version = "2.0.0", default-features = false, features = ["client", "ser # Async runtime & networking async-compat = "=0.2.5" -async-nats = { version = "=0.49.0", default-features = false } +async-nats = { version = "=0.49.1", default-features = false } async-trait = "=0.1.89" axum = { version = "=0.8.9", features = ["ws"] } -bytes = "=1.11.1" +bytes = "=1.12.0" base64 = "=0.22.1" -buffa = { version = "=0.7.0", features = ["json"] } -buffa-types = { version = "=0.7.0", features = ["json"] } +buffa = { version = "=0.8.1", features = ["json"] } +buffa-types = { version = "=0.8.1", features = ["json"] } futures = "=0.3.32" futures-util = "=0.3.32" -tokio = "=1.52.1" +tokio = "=1.52.3" tokio-util = "=0.7.18" tokio-tungstenite = "=0.29.0" tower = "=0.5.3" -tower-http = { version = "=0.6.8", features = ["trace"] } +tower-http = { version = "=0.7.0", features = ["trace"] } # Database -sqlx = { version = "0.8", default-features = false, features = ["runtime-tokio", "macros", "migrate", "postgres", "chrono", "json"] } +sqlx = { version = "0.9", default-features = false, features = ["runtime-tokio", "macros", "migrate", "postgres", "chrono", "json"] } # Serialization confique = { version = "=0.4.0", features = ["toml"] } serde = { version = "=1.0.228", features = ["derive"] } -serde_json = "=1.0.149" -jsonschema = { version = "=0.46.5", default-features = false } +serde_json = "=1.0.150" +jsonschema = { version = "=0.46.9", default-features = false } # CLI clap = { version = "=4.6.1", features = ["derive"] } @@ -102,29 +102,29 @@ twilight-gateway = { version = "=0.17.1", default-features = false, features = [ twilight-model = "=0.17.1" # Error handling -anyhow = "=1.0.102" +anyhow = "=1.0.103" thiserror = "=2.0.18" # SpiceDB / authzed gRPC (feature-gated SpiceDB-backed import gate) authzed = { package = "spicedb-grpc-tonic", version = "=1.0.0" } tonic = { version = "=0.14.6", default-features = false, features = ["transport", "codegen", "router"] } -moka = { version = "=0.12.10", features = ["future"] } +moka = { version = "=0.12.15", features = ["future"] } # Misc chrono-tz = "=0.10.4" ed25519-dalek = { version = "=2.2.0", features = ["std", "rand_core"] } -toml = "=0.8.23" +toml = "=1.1.2" wasmtime = "=46.0.1" -http = "=1.4.0" +http = "=1.4.2" reqwest = { version = "=0.12.28", default-features = false, features = ["json", "rustls-tls", "stream"] } rrule = "=0.14.0" -sha2 = "=0.10.8" -wiremock = "=0.6.3" +sha2 = "=0.11.0" +wiremock = "=0.6.5" tempfile = "=3.27.0" -filetime = "=0.2.27" -time = "=0.3.47" +filetime = "=0.2.29" +time = "=0.3.53" url = "=2.5.8" -uuid = { version = "=1.23.1", features = ["v4", "v7"] } +uuid = { version = "=1.23.4", features = ["v4", "v7"] } prost-reflect = "=0.14.7" serde_yaml = "=0.9.34" wasmtime-wasi = "=46.0.1" @@ -132,14 +132,14 @@ wit-bindgen = "=0.58.0" # Auth callout hex = "=0.4.3" -hmac = "=0.12.1" -jsonwebtoken = "=10.3.0" +hmac = "=0.13.0" +jsonwebtoken = "=10.4.0" nats-jwt-rs = "=0.1.1" nkeys = { version = "=0.4.5", features = ["xkeys"] } rustls-pemfile = "=2.2.0" -rustls-pki-types = { version = "=1.14.0", default-features = false, features = ["std"] } +rustls-pki-types = { version = "=1.15.0", default-features = false, features = ["std"] } rustls-webpki = { version = "=0.103.13", default-features = false, features = ["std", "alloc", "ring"] } -x509-parser = "=0.16.0" +x509-parser = "=0.18.1" [profile.release] lto = "thin" diff --git a/rsworkspace/crates/a2a-auth-callout/Cargo.toml b/rsworkspace/crates/a2a-auth-callout/Cargo.toml index d35d227d2..3ab0182a7 100644 --- a/rsworkspace/crates/a2a-auth-callout/Cargo.toml +++ b/rsworkspace/crates/a2a-auth-callout/Cargo.toml @@ -41,16 +41,16 @@ tracing = { workspace = true } tracing-subscriber = { version = "=0.3.23", features = ["fmt", "env-filter"] } trogon-std = { workspace = true } uuid = { workspace = true } -x509-parser = { version = "=0.16.0", features = ["verify"] } -data-encoding = "=2.10.0" +x509-parser = { version = "=0.18.1", features = ["verify"] } +data-encoding = "=2.11.0" [dev-dependencies] tempfile = { workspace = true } trogon-std = { workspace = true, features = ["test-support"] } -rand_core = "=0.6.4" -rcgen = "=0.13.2" +rand_core = "=0.10.1" +rcgen = "=0.14.8" rsa = { version = "=0.9.10", features = ["pem"] } -testcontainers = "=0.27.0" +testcontainers = "=0.27.3" wiremock = { workspace = true } [features] diff --git a/rsworkspace/crates/a2a-gateway/Cargo.toml b/rsworkspace/crates/a2a-gateway/Cargo.toml index c59124af6..ee2efa1d7 100644 --- a/rsworkspace/crates/a2a-gateway/Cargo.toml +++ b/rsworkspace/crates/a2a-gateway/Cargo.toml @@ -37,7 +37,7 @@ bytes = { workspace = true } cel-interpreter = { workspace = true } clap = { workspace = true, features = ["derive", "env"] } futures = { workspace = true } -jsonwebtoken = { version = "=10.3.0", features = ["rust_crypto"] } +jsonwebtoken = { version = "=10.4.0", features = ["rust_crypto"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } thiserror = { workspace = true } @@ -57,7 +57,7 @@ uuid = { workspace = true } base64 = { workspace = true } nkeys = { workspace = true } p256 = { version = "=0.13.2", features = ["ecdsa", "pkcs8"] } -rand_core = { version = "=0.6.4" } +rand_core = { version = "=0.10.1" } serde_json = { workspace = true } filetime = { workspace = true } sha2 = { workspace = true } diff --git a/rsworkspace/crates/trogon-aauth-verify/Cargo.toml b/rsworkspace/crates/trogon-aauth-verify/Cargo.toml index 2f607acf1..156d9e22c 100644 --- a/rsworkspace/crates/trogon-aauth-verify/Cargo.toml +++ b/rsworkspace/crates/trogon-aauth-verify/Cargo.toml @@ -20,7 +20,7 @@ base64 = { workspace = true } # crate's parser only models cleanly from jsonwebtoken 10.x; keep the # version pin local to this crate so main's other jsonwebtoken 9.3 # consumers (auth-callout, etc.) are not forced to upgrade in lockstep. -jsonwebtoken = { version = "=10.3.0", features = ["rust_crypto"] } +jsonwebtoken = { version = "=10.4.0", features = ["rust_crypto"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } sha2 = { workspace = true } @@ -32,6 +32,6 @@ trogon-identity-types = { workspace = true } [dev-dependencies] ed25519-dalek = { version = "=2.2.0", features = ["std", "rand_core", "pkcs8"] } p256 = { version = "=0.13.2", features = ["ecdsa", "pkcs8"] } -pkcs8 = { version = "=0.10.2", features = ["pem"] } -rand_core = { version = "=0.6.4" } +pkcs8 = { version = "=0.11.0", features = ["pem"] } +rand_core = { version = "=0.10.1" } tokio = { workspace = true, features = ["rt", "macros", "sync"] } diff --git a/rsworkspace/crates/trogon-scheduler-domain/Cargo.toml b/rsworkspace/crates/trogon-scheduler-domain/Cargo.toml index 4b0115daa..ef97af52b 100644 --- a/rsworkspace/crates/trogon-scheduler-domain/Cargo.toml +++ b/rsworkspace/crates/trogon-scheduler-domain/Cargo.toml @@ -22,7 +22,7 @@ buffa = { workspace = true } buffa-types = { workspace = true } chrono = { version = "0.4", default-features = false, features = ["std"] } chrono-tz = "0.10" -cron = "0.15" +cron = "0.17" rrule = { version = "0.14", optional = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/rsworkspace/crates/trogon-scheduler/Cargo.toml b/rsworkspace/crates/trogon-scheduler/Cargo.toml index 767fdc34d..399c0da9d 100644 --- a/rsworkspace/crates/trogon-scheduler/Cargo.toml +++ b/rsworkspace/crates/trogon-scheduler/Cargo.toml @@ -32,7 +32,7 @@ buffa-types = { workspace = true } bytes = { workspace = true } chrono = { version = "0.4", features = ["serde"] } chrono-tz = { workspace = true } -cron = "0.15" +cron = "0.17" futures = { workspace = true } opentelemetry = { workspace = true } rrule = { workspace = true } From 62e688db5883af48f728117c79feba50417573af Mon Sep 17 00:00:00 2001 From: Yordis Prieto Date: Fri, 3 Jul 2026 01:12:33 -0400 Subject: [PATCH 2/2] chore(deps): reconcile grouped rust bump with pinned crypto crates - The grouped bump advanced rand_core and pkcs8 to major lines the pinned p256 and ed25519-dalek releases cannot interoperate with, so those two are held back to keep the crypto graph coherent while the rest of the group moves forward. - buffa 0.8 changes its generated decode contract, so the committed bindings and codegen plugin pins must track the library version for the tree to build. Signed-off-by: Yordis Prieto --- .mise.toml | 4 +- rsworkspace/Cargo.lock | 82 +- .../crates/a2a-auth-callout/Cargo.toml | 2 +- .../src/credentials/api_key.rs | 2 +- .../src/credentials/mtls/tests.rs | 13 +- .../tests/nats_server_callout_integration.rs | 7 +- rsworkspace/crates/a2a-gateway/Cargo.toml | 2 +- .../crates/trogon-aauth-verify/Cargo.toml | 4 +- .../src/projections/postgres/store.rs | 21 +- .../trogonai-proto/src/gen/elixirpb.__view.rs | 135 +- .../crates/trogonai-proto/src/gen/elixirpb.rs | 29 +- .../src/gen/google.type.datetime.__view.rs | 701 ++++---- .../src/gen/google.type.datetime.rs | 223 +-- .../trogon.content.v1alpha1.content.__view.rs | 170 +- .../gen/trogon.content.v1alpha1.content.rs | 47 +- ...edules.checkpoints.v1.checkpoint.__view.rs | 395 ++--- ...ler.schedules.checkpoints.v1.checkpoint.rs | 152 +- ...chedules.checkpoints.v1.delivery.__view.rs | 868 +++++----- ...duler.schedules.checkpoints.v1.delivery.rs | 187 +-- ...schedules.checkpoints.v1.message.__view.rs | 378 ++--- ...eduler.schedules.checkpoints.v1.message.rs | 92 +- ...chedules.checkpoints.v1.schedule.__view.rs | 1451 ++++++++--------- ...duler.schedules.checkpoints.v1.schedule.rs | 379 ++--- ...chedules.projections.v1.delivery.__view.rs | 868 +++++----- ...duler.schedules.projections.v1.delivery.rs | 187 +-- ...schedules.projections.v1.message.__view.rs | 378 ++--- ...eduler.schedules.projections.v1.message.rs | 92 +- ...chedules.projections.v1.schedule.__view.rs | 1451 ++++++++--------- ...duler.schedules.projections.v1.schedule.rs | 379 ++--- ...ojections.v1.schedule_projection.__view.rs | 484 +++--- ...ules.projections.v1.schedule_projection.rs | 161 +- ...s.projections.v1.schedule_status.__view.rs | 543 +++--- ...chedules.projections.v1.schedule_status.rs | 93 +- ...heduler.schedules.state.v1.state.__view.rs | 341 ++-- ...onai.scheduler.schedules.state.v1.state.rs | 116 +- ...ler.schedules.v1.create_schedule.__view.rs | 367 ++--- ....scheduler.schedules.v1.create_schedule.rs | 106 +- ....scheduler.schedules.v1.delivery.__view.rs | 868 +++++----- ...rogonai.scheduler.schedules.v1.delivery.rs | 187 +-- ...ai.scheduler.schedules.v1.events.__view.rs | 727 ++++----- .../trogonai.scheduler.schedules.v1.events.rs | 221 +-- ...i.scheduler.schedules.v1.message.__view.rs | 378 ++--- ...trogonai.scheduler.schedules.v1.message.rs | 92 +- ...uler.schedules.v1.pause_schedule.__view.rs | 143 +- ...i.scheduler.schedules.v1.pause_schedule.rs | 26 +- ...ler.schedules.v1.remove_schedule.__view.rs | 143 +- ....scheduler.schedules.v1.remove_schedule.rs | 26 +- ...ler.schedules.v1.resume_schedule.__view.rs | 143 +- ....scheduler.schedules.v1.resume_schedule.rs | 26 +- ....scheduler.schedules.v1.schedule.__view.rs | 1451 ++++++++--------- ...rogonai.scheduler.schedules.v1.schedule.rs | 379 ++--- ....schedules.v1.schedule_completed.__view.rs | 183 +-- ...heduler.schedules.v1.schedule_completed.rs | 41 +- ...er.schedules.v1.schedule_created.__view.rs | 367 ++--- ...scheduler.schedules.v1.schedule_created.rs | 106 +- ....v1.schedule_occurrence_recorded.__view.rs | 306 ++-- ...hedules.v1.schedule_occurrence_recorded.rs | 81 +- ...v1.schedule_occurrence_scheduled.__view.rs | 306 ++-- ...edules.v1.schedule_occurrence_scheduled.rs | 81 +- ...ler.schedules.v1.schedule_paused.__view.rs | 143 +- ....scheduler.schedules.v1.schedule_paused.rs | 26 +- ...er.schedules.v1.schedule_removed.__view.rs | 143 +- ...scheduler.schedules.v1.schedule_removed.rs | 26 +- ...er.schedules.v1.schedule_resumed.__view.rs | 143 +- ...scheduler.schedules.v1.schedule_resumed.rs | 26 +- ...ler.schedules.v1.schedule_status.__view.rs | 543 +++--- ....scheduler.schedules.v1.schedule_status.rs | 93 +- 67 files changed, 7699 insertions(+), 10635 deletions(-) diff --git a/.mise.toml b/.mise.toml index bd6ad231a..7506ecbd7 100644 --- a/.mise.toml +++ b/.mise.toml @@ -3,8 +3,8 @@ buf = "1.70.0" "ubi:open-telemetry/weaver" = { version = "0.24.2", exe = "weaver" } "cargo:cargo-dylint" = "6.0.1" "cargo:dylint-link" = "6.0.1" -"cargo:protoc-gen-buffa" = "0.7.0" -"cargo:protoc-gen-buffa-packaging" = "0.7.0" +"cargo:protoc-gen-buffa" = "0.8.1" +"cargo:protoc-gen-buffa-packaging" = "0.8.1" "cargo:cargo-component" = "0.21.1" "cargo:cargo-deny" = "0.19.8" "cargo:wasm-tools" = "1.250.0" diff --git a/rsworkspace/Cargo.lock b/rsworkspace/Cargo.lock index d76050672..7dcd22959 100644 --- a/rsworkspace/Cargo.lock +++ b/rsworkspace/Cargo.lock @@ -16,7 +16,7 @@ dependencies = [ "jsonwebtoken", "nats-jwt-rs", "nkeys", - "rand_core 0.10.1", + "rand_core 0.6.4", "rcgen", "reqwest 0.12.28", "rsa", @@ -82,7 +82,7 @@ dependencies = [ "jsonwebtoken", "nkeys", "p256", - "rand_core 0.10.1", + "rand_core 0.6.4", "serde", "serde_json", "sha2 0.11.0", @@ -1844,18 +1844,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid 0.9.6", - "pem-rfc7468 0.7.0", - "zeroize", -] - -[[package]] -name = "der" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" -dependencies = [ - "const-oid 0.10.2", - "pem-rfc7468 1.0.0", + "pem-rfc7468", "zeroize", ] @@ -2027,12 +2016,12 @@ version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "der 0.7.10", + "der", "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", - "spki 0.7.3", + "spki", ] [[package]] @@ -2041,7 +2030,7 @@ version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "pkcs8 0.10.2", + "pkcs8", "signature", ] @@ -2083,8 +2072,8 @@ dependencies = [ "generic-array", "group", "hkdf 0.12.4", - "pem-rfc7468 0.7.0", - "pkcs8 0.10.2", + "pem-rfc7468", + "pkcs8", "rand_core 0.6.4", "sec1", "subtle", @@ -3854,15 +3843,6 @@ dependencies = [ "base64ct", ] -[[package]] -name = "pem-rfc7468" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.2" @@ -3982,9 +3962,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der 0.7.10", - "pkcs8 0.10.2", - "spki 0.7.3", + "der", + "pkcs8", + "spki", ] [[package]] @@ -3993,18 +3973,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.10", - "spki 0.7.3", -] - -[[package]] -name = "pkcs8" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" -dependencies = [ - "der 0.8.0", - "spki 0.8.0", + "der", + "spki", ] [[package]] @@ -4668,10 +4638,10 @@ dependencies = [ "num-integer", "num-traits", "pkcs1", - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", "signature", - "spki 0.7.3", + "spki", "subtle", "zeroize", ] @@ -4920,9 +4890,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", - "der 0.7.10", + "der", "generic-array", - "pkcs8 0.10.2", + "pkcs8", "subtle", "zeroize", ] @@ -5202,7 +5172,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31" dependencies = [ - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", "signature", "zeroize", @@ -5322,17 +5292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.10", -] - -[[package]] -name = "spki" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" -dependencies = [ - "base64ct", - "der 0.8.0", + "der", ] [[package]] @@ -6233,8 +6193,8 @@ dependencies = [ "ed25519-dalek", "jsonwebtoken", "p256", - "pkcs8 0.11.0", - "rand_core 0.10.1", + "pkcs8", + "rand_core 0.6.4", "serde", "serde_json", "sha2 0.11.0", diff --git a/rsworkspace/crates/a2a-auth-callout/Cargo.toml b/rsworkspace/crates/a2a-auth-callout/Cargo.toml index 3ab0182a7..bc73c8ec0 100644 --- a/rsworkspace/crates/a2a-auth-callout/Cargo.toml +++ b/rsworkspace/crates/a2a-auth-callout/Cargo.toml @@ -47,7 +47,7 @@ data-encoding = "=2.11.0" [dev-dependencies] tempfile = { workspace = true } trogon-std = { workspace = true, features = ["test-support"] } -rand_core = "=0.10.1" +rand_core = "=0.6.4" rcgen = "=0.14.8" rsa = { version = "=0.9.10", features = ["pem"] } testcontainers = "=0.27.3" diff --git a/rsworkspace/crates/a2a-auth-callout/src/credentials/api_key.rs b/rsworkspace/crates/a2a-auth-callout/src/credentials/api_key.rs index 6e71cbfe2..7bf49edcd 100644 --- a/rsworkspace/crates/a2a-auth-callout/src/credentials/api_key.rs +++ b/rsworkspace/crates/a2a-auth-callout/src/credentials/api_key.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::sync::Arc; -use hmac::{Hmac, Mac}; +use hmac::{Hmac, KeyInit, Mac}; use sha2::Sha256; use crate::error::AuthCalloutError; diff --git a/rsworkspace/crates/a2a-auth-callout/src/credentials/mtls/tests.rs b/rsworkspace/crates/a2a-auth-callout/src/credentials/mtls/tests.rs index 8cc46ab76..d77f9182f 100644 --- a/rsworkspace/crates/a2a-auth-callout/src/credentials/mtls/tests.rs +++ b/rsworkspace/crates/a2a-auth-callout/src/credentials/mtls/tests.rs @@ -1,4 +1,4 @@ -use rcgen::{BasicConstraints, CertificateParams, DistinguishedName, DnType, IsCa, KeyPair}; +use rcgen::{BasicConstraints, CertificateParams, DistinguishedName, DnType, IsCa, Issuer, KeyPair}; use time::OffsetDateTime; use x509_parser::pem::Pem; @@ -32,7 +32,9 @@ async fn verifies_rcgen_chain() { let mut ee_params = CertificateParams::default(); ee_params.distinguished_name = ee_dn; - let ee = ee_params.signed_by(&ee_key, &ca, &ca_key).expect("ee"); + let ee = ee_params + .signed_by(&ee_key, &Issuer::from_params(&ca_params, &ca_key)) + .expect("ee"); let leaf_pem = ee.pem(); let anchors = ca.pem(); @@ -60,11 +62,10 @@ async fn rejects_wrong_anchor() { let mut ca_params = CertificateParams::default(); ca_params.distinguished_name = ca_dn; ca_params.is_ca = IsCa::Ca(BasicConstraints::Unconstrained); - let ca = ca_params.self_signed(&ca_key).expect("ca"); let ee_key = KeyPair::generate().expect("ee"); let ee = CertificateParams::default() - .signed_by(&ee_key, &ca, &ca_key) + .signed_by(&ee_key, &Issuer::from_params(&ca_params, &ca_key)) .expect("ee"); let v = X509MtlsVerifier::new(TrustAnchorPem::new(unrelated_ca.pem())); @@ -120,7 +121,9 @@ async fn rejects_expired_certificate() { ee_dn.push(DnType::CommonName, "test-service"); let mut ee_params = CertificateParams::default(); ee_params.distinguished_name = ee_dn; - let ee = ee_params.signed_by(&ee_key, &ca, &ca_key).expect("ee"); + let ee = ee_params + .signed_by(&ee_key, &Issuer::from_params(&ca_params, &ca_key)) + .expect("ee"); let v = X509MtlsVerifier::new(TrustAnchorPem::new(ca.pem())); // Use a `now` far in the past so the cert is outside its validity window. diff --git a/rsworkspace/crates/a2a-auth-callout/tests/nats_server_callout_integration.rs b/rsworkspace/crates/a2a-auth-callout/tests/nats_server_callout_integration.rs index e30b6aceb..513908e57 100644 --- a/rsworkspace/crates/a2a-auth-callout/tests/nats_server_callout_integration.rs +++ b/rsworkspace/crates/a2a-auth-callout/tests/nats_server_callout_integration.rs @@ -34,7 +34,7 @@ use jsonwebtoken::jwk::{ }; use jsonwebtoken::{Algorithm, EncodingKey, Header, encode}; use rand_core::OsRng; -use rcgen::{BasicConstraints, CertificateParams, DistinguishedName, DnType, IsCa, KeyPair, SanType}; +use rcgen::{BasicConstraints, CertificateParams, DistinguishedName, DnType, IsCa, Issuer, KeyPair, SanType}; use rsa::RsaPrivateKey; use rsa::pkcs8::EncodePrivateKey; use rsa::traits::PublicKeyParts; @@ -585,6 +585,7 @@ fn write_tls_fixture() -> TlsFixture { ca_params.is_ca = IsCa::Ca(BasicConstraints::Unconstrained); let ca = ca_params.self_signed(&ca_key).expect("ca cert"); let ca_pem = ca.pem(); + let issuer = Issuer::from_params(&ca_params, &ca_key); let server_key = KeyPair::generate().expect("server key"); let mut server_dn = DistinguishedName::new(); @@ -595,14 +596,14 @@ fn write_tls_fixture() -> TlsFixture { SanType::DnsName("localhost".try_into().expect("dns san")), SanType::IpAddress(IpAddr::V4(Ipv4Addr::LOCALHOST)), ]; - let server_cert = server_params.signed_by(&server_key, &ca, &ca_key).expect("server cert"); + let server_cert = server_params.signed_by(&server_key, &issuer).expect("server cert"); let ee_key = KeyPair::generate().expect("ee key"); let mut ee_dn = DistinguishedName::new(); ee_dn.push(DnType::CommonName, "integration-client"); let mut ee_params = CertificateParams::default(); ee_params.distinguished_name = ee_dn; - let ee = ee_params.signed_by(&ee_key, &ca, &ca_key).expect("ee cert"); + let ee = ee_params.signed_by(&ee_key, &issuer).expect("ee cert"); std::fs::write(cert_dir.join("server.pem"), server_cert.pem()).expect("server pem"); std::fs::write(cert_dir.join("server-key.pem"), server_key.serialize_pem()).expect("server key"); diff --git a/rsworkspace/crates/a2a-gateway/Cargo.toml b/rsworkspace/crates/a2a-gateway/Cargo.toml index ee2efa1d7..fe7f7d91c 100644 --- a/rsworkspace/crates/a2a-gateway/Cargo.toml +++ b/rsworkspace/crates/a2a-gateway/Cargo.toml @@ -57,7 +57,7 @@ uuid = { workspace = true } base64 = { workspace = true } nkeys = { workspace = true } p256 = { version = "=0.13.2", features = ["ecdsa", "pkcs8"] } -rand_core = { version = "=0.10.1" } +rand_core = { version = "=0.6.4" } serde_json = { workspace = true } filetime = { workspace = true } sha2 = { workspace = true } diff --git a/rsworkspace/crates/trogon-aauth-verify/Cargo.toml b/rsworkspace/crates/trogon-aauth-verify/Cargo.toml index 156d9e22c..a40656b30 100644 --- a/rsworkspace/crates/trogon-aauth-verify/Cargo.toml +++ b/rsworkspace/crates/trogon-aauth-verify/Cargo.toml @@ -32,6 +32,6 @@ trogon-identity-types = { workspace = true } [dev-dependencies] ed25519-dalek = { version = "=2.2.0", features = ["std", "rand_core", "pkcs8"] } p256 = { version = "=0.13.2", features = ["ecdsa", "pkcs8"] } -pkcs8 = { version = "=0.11.0", features = ["pem"] } -rand_core = { version = "=0.10.1" } +pkcs8 = { version = "=0.10.2", features = ["pem"] } +rand_core = { version = "=0.6.4" } tokio = { workspace = true, features = ["rt", "macros", "sync"] } diff --git a/rsworkspace/crates/trogon-scheduler/src/projections/postgres/store.rs b/rsworkspace/crates/trogon-scheduler/src/projections/postgres/store.rs index 69ffb9c77..d8e36e079 100644 --- a/rsworkspace/crates/trogon-scheduler/src/projections/postgres/store.rs +++ b/rsworkspace/crates/trogon-scheduler/src/projections/postgres/store.rs @@ -62,11 +62,18 @@ impl PostgresSchedulesProjection { } } -const SELECT_COLUMNS: &str = "SELECT schedule_id, status, completed, next_occurrence_at, last_occurrence_at, \ - schedule_kind, at_at, every_seconds, cron_expr, rrule, rrule_dtstart, timezone, rrule_rdate, rrule_exdate, \ - delivery_kind, delivery_subject, delivery_ttl_seconds, delivery_source_subject, \ - message_content_type, message_body, message_headers \ - FROM schedules_projection"; +macro_rules! select_columns { + () => { + "SELECT schedule_id, status, completed, next_occurrence_at, last_occurrence_at, \ + schedule_kind, at_at, every_seconds, cron_expr, rrule, rrule_dtstart, timezone, rrule_rdate, rrule_exdate, \ + delivery_kind, delivery_subject, delivery_ttl_seconds, delivery_source_subject, \ + message_content_type, message_body, message_headers \ + FROM schedules_projection" + }; +} + +const SELECT_PROJECTION_BY_ID: &str = concat!(select_columns!(), " WHERE schedule_id = $1"); +const SELECT_ALL_PROJECTIONS: &str = concat!(select_columns!(), " ORDER BY schedule_id"); fn malformed(context: &'static str) -> SchedulerError { SchedulerError::kv_source( @@ -298,7 +305,7 @@ impl PostgresSchedulesProjection { &self, schedule_id: &ScheduleId, ) -> Result, SchedulerError> { - let row = sqlx::query(&format!("{SELECT_COLUMNS} WHERE schedule_id = $1")) + let row = sqlx::query(SELECT_PROJECTION_BY_ID) .bind(schedule_id.as_str()) .fetch_optional(&self.pool) .await @@ -310,7 +317,7 @@ impl PostgresSchedulesProjection { } pub async fn list_projections(&self) -> Result, SchedulerError> { - let rows = sqlx::query(&format!("{SELECT_COLUMNS} ORDER BY schedule_id")) + let rows = sqlx::query(SELECT_ALL_PROJECTIONS) .fetch_all(&self.pool) .await .map_err(|source| SchedulerError::kv_source("failed to list projected schedules", source))?; diff --git a/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.__view.rs index 1bc933093..4aac67617 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.__view.rs @@ -15,87 +15,63 @@ pub struct FileOptionsView<'a> { /// Field 1: `module_prefix` pub module_prefix: ::core::option::Option<&'a str>, } -impl<'a> FileOptionsView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for FileOptionsView<'a> { + type Owned = super::super::FileOptions; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.module_prefix = Some(::buffa::types::borrow_str(&mut cur)?); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.module_prefix = Some(::buffa::types::borrow_str(&mut cur)?); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for FileOptionsView<'a> { - type Owned = super::super::FileOptions; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::FileOptions { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::FileOptions { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::FileOptions { + ::core::result::Result::Ok(super::super::FileOptions { module_prefix: self.module_prefix.map(|s| s.to_string()), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for FileOptionsView<'a> { @@ -118,12 +94,7 @@ impl<'a> ::buffa::ViewEncode<'a> for FileOptionsView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if let Some(ref v) = self.module_prefix { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(v, buf); + ::buffa::types::put_string_field(1u32, v, buf); } } } @@ -157,24 +128,8 @@ impl<'a> ::buffa::MessageName for FileOptionsView<'a> { const FULL_NAME: &'static str = "elixirpb.FileOptions"; const TYPE_URL: &'static str = "type.googleapis.com/elixirpb.FileOptions"; } -impl<'v> ::buffa::DefaultViewInstance for FileOptionsView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for FileOptionsView<'static> { - type Reborrowed<'b> = FileOptionsView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(FileOptionsView); +::buffa::impl_view_reborrow!(FileOptionsView); /** Self-contained, `'static` owned view of a `FileOptions` message. Wraps [`::buffa::OwnedView`]`<`[`FileOptionsView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -233,8 +188,14 @@ impl FileOptionsOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::FileOptions { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.rs b/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.rs index 86316f91f..81691a23a 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/elixirpb.rs @@ -48,12 +48,7 @@ impl FileOptions { self } } -impl ::buffa::DefaultInstance for FileOptions { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(FileOptions); impl ::buffa::MessageName for FileOptions { const PACKAGE: &'static str = "elixirpb"; const NAME: &'static str = "FileOptions"; @@ -84,19 +79,14 @@ impl ::buffa::Message for FileOptions { #[allow(unused_imports)] use ::buffa::Enumeration as _; if let Some(ref v) = self.module_prefix { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(v, buf); + ::buffa::types::put_string_field(1u32, v, buf); } } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -104,13 +94,10 @@ impl ::buffa::Message for FileOptions { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string( self .module_prefix @@ -119,7 +106,7 @@ impl ::buffa::Message for FileOptions { )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.__view.rs index 2394b4f9d..9f4fd0df4 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.__view.rs @@ -72,208 +72,164 @@ pub struct DateTimeView<'a> { super::super::__buffa::view::oneof::date_time::TimeOffset<'a>, >, } -impl<'a> DateTimeView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for DateTimeView<'a> { + type Owned = super::super::DateTime; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.year = ::buffa::types::decode_int32(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.month = ::buffa::types::decode_int32(&mut cur)?; - } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.day = ::buffa::types::decode_int32(&mut cur)?; - } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.hours = ::buffa::types::decode_int32(&mut cur)?; - } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.minutes = ::buffa::types::decode_int32(&mut cur)?; - } - 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.seconds = ::buffa::types::decode_int32(&mut cur)?; - } - 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.nanos = ::buffa::types::decode_int32(&mut cur)?; - } - 8u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 8u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.year = ::buffa::types::decode_int32(&mut cur)?; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.month = ::buffa::types::decode_int32(&mut cur)?; + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.day = ::buffa::types::decode_int32(&mut cur)?; + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.hours = ::buffa::types::decode_int32(&mut cur)?; + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.minutes = ::buffa::types::decode_int32(&mut cur)?; + } + 6u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.seconds = ::buffa::types::decode_int32(&mut cur)?; + } + 7u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.nanos = ::buffa::types::decode_int32(&mut cur)?; + } + 8u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::date_time::TimeOffset::UtcOffset( + ref mut existing, + ), + ) = view.time_offset + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.time_offset = Some( super::super::__buffa::view::oneof::date_time::TimeOffset::UtcOffset( - ref mut existing, - ), - ) = view.time_offset - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.time_offset = Some( - super::super::__buffa::view::oneof::date_time::TimeOffset::UtcOffset( - ::buffa::alloc::boxed::Box::new( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 9u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 9u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 9u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::date_time::TimeOffset::TimeZone( + ref mut existing, + ), + ) = view.time_offset + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.time_offset = Some( super::super::__buffa::view::oneof::date_time::TimeOffset::TimeZone( - ref mut existing, - ), - ) = view.time_offset - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.time_offset = Some( - super::super::__buffa::view::oneof::date_time::TimeOffset::TimeZone( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for DateTimeView<'a> { - type Owned = super::super::DateTime; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::DateTime { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::DateTime { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::DateTime { + ::core::result::Result::Ok(super::super::DateTime { year: self.year, month: self.month, day: self.day, @@ -281,31 +237,35 @@ impl<'a> ::buffa::MessageView<'a> for DateTimeView<'a> { minutes: self.minutes, seconds: self.seconds, nanos: self.nanos, - time_offset: self - .time_offset - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::date_time::TimeOffset::UtcOffset( - v, - ) => { - super::super::__buffa::oneof::date_time::TimeOffset::UtcOffset( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::date_time::TimeOffset::TimeZone( - v, - ) => { - super::super::__buffa::oneof::date_time::TimeOffset::TimeZone( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + time_offset: match self.time_offset.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::date_time::TimeOffset::UtcOffset( + v, + ) => { + super::super::__buffa::oneof::date_time::TimeOffset::UtcOffset( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::date_time::TimeOffset::TimeZone( + v, + ) => { + super::super::__buffa::oneof::date_time::TimeOffset::TimeZone( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for DateTimeView<'a> { @@ -370,62 +330,46 @@ impl<'a> ::buffa::ViewEncode<'a> for DateTimeView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.year != 0i32 { - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.year, buf); + ::buffa::types::put_int32_field(1u32, self.year, buf); } if self.month != 0i32 { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.month, buf); + ::buffa::types::put_int32_field(2u32, self.month, buf); } if self.day != 0i32 { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.day, buf); + ::buffa::types::put_int32_field(3u32, self.day, buf); } if self.hours != 0i32 { - ::buffa::encoding::Tag::new(4u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.hours, buf); + ::buffa::types::put_int32_field(4u32, self.hours, buf); } if self.minutes != 0i32 { - ::buffa::encoding::Tag::new(5u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.minutes, buf); + ::buffa::types::put_int32_field(5u32, self.minutes, buf); } if self.seconds != 0i32 { - ::buffa::encoding::Tag::new(6u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.seconds, buf); + ::buffa::types::put_int32_field(6u32, self.seconds, buf); } if self.nanos != 0i32 { - ::buffa::encoding::Tag::new(7u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.nanos, buf); + ::buffa::types::put_int32_field(7u32, self.nanos, buf); } if let ::core::option::Option::Some(ref v) = self.time_offset { match v { super::super::__buffa::view::oneof::date_time::TimeOffset::UtcOffset( x, ) => { - ::buffa::encoding::Tag::new( - 8u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 8u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::date_time::TimeOffset::TimeZone( x, ) => { - ::buffa::encoding::Tag::new( - 9u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 9u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -451,88 +395,46 @@ impl<'__a> ::serde::Serialize for DateTimeView<'__a> { use ::serde::ser::SerializeMap as _; let mut __map = __s.serialize_map(::core::option::Option::None)?; if !::buffa::json_helpers::skip_if::is_zero_i32(&self.year) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("year", &_W(self.year))?; + __map + .serialize_entry("year", &::buffa::json_helpers::ProtoJson(&self.year))?; } if !::buffa::json_helpers::skip_if::is_zero_i32(&self.month) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("month", &_W(self.month))?; + __map + .serialize_entry( + "month", + &::buffa::json_helpers::ProtoJson(&self.month), + )?; } if !::buffa::json_helpers::skip_if::is_zero_i32(&self.day) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("day", &_W(self.day))?; + __map.serialize_entry("day", &::buffa::json_helpers::ProtoJson(&self.day))?; } if !::buffa::json_helpers::skip_if::is_zero_i32(&self.hours) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("hours", &_W(self.hours))?; + __map + .serialize_entry( + "hours", + &::buffa::json_helpers::ProtoJson(&self.hours), + )?; } if !::buffa::json_helpers::skip_if::is_zero_i32(&self.minutes) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("minutes", &_W(self.minutes))?; + __map + .serialize_entry( + "minutes", + &::buffa::json_helpers::ProtoJson(&self.minutes), + )?; } if !::buffa::json_helpers::skip_if::is_zero_i32(&self.seconds) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("seconds", &_W(self.seconds))?; + __map + .serialize_entry( + "seconds", + &::buffa::json_helpers::ProtoJson(&self.seconds), + )?; } if !::buffa::json_helpers::skip_if::is_zero_i32(&self.nanos) { - struct _W(i32); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::int32::serialize(&self.0, __s) - } - } - __map.serialize_entry("nanos", &_W(self.nanos))?; + __map + .serialize_entry( + "nanos", + &::buffa::json_helpers::ProtoJson(&self.nanos), + )?; } if let ::core::option::Option::Some(ref __ov) = self.time_offset { match __ov { @@ -557,24 +459,8 @@ impl<'a> ::buffa::MessageName for DateTimeView<'a> { const FULL_NAME: &'static str = "google.type.DateTime"; const TYPE_URL: &'static str = "type.googleapis.com/google.type.DateTime"; } -impl<'v> ::buffa::DefaultViewInstance for DateTimeView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for DateTimeView<'static> { - type Reborrowed<'b> = DateTimeView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(DateTimeView); +::buffa::impl_view_reborrow!(DateTimeView); /** Self-contained, `'static` owned view of a `DateTime` message. Wraps [`::buffa::OwnedView`]`<`[`DateTimeView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -631,8 +517,14 @@ impl DateTimeOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::DateTime { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -754,98 +646,71 @@ pub struct TimeZoneView<'a> { /// Field 2: `version` pub version: &'a str, } -impl<'a> TimeZoneView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for TimeZoneView<'a> { + type Owned = super::super::TimeZone; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.version = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.id = ::buffa::types::borrow_str(&mut cur)?; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.version = ::buffa::types::borrow_str(&mut cur)?; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } -} -impl<'a> ::buffa::MessageView<'a> for TimeZoneView<'a> { - type Owned = super::super::TimeZone; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::TimeZone { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::TimeZone { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::TimeZone { + ::core::result::Result::Ok(super::super::TimeZone { id: self.id.to_string(), version: self.version.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for TimeZoneView<'a> { @@ -871,20 +736,10 @@ impl<'a> ::buffa::ViewEncode<'a> for TimeZoneView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if !self.id.is_empty() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.id, buf); + ::buffa::types::put_string_field(1u32, &self.id, buf); } if !self.version.is_empty() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.version, buf); + ::buffa::types::put_string_field(2u32, &self.version, buf); } } } @@ -921,24 +776,8 @@ impl<'a> ::buffa::MessageName for TimeZoneView<'a> { const FULL_NAME: &'static str = "google.type.TimeZone"; const TYPE_URL: &'static str = "type.googleapis.com/google.type.TimeZone"; } -impl<'v> ::buffa::DefaultViewInstance for TimeZoneView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for TimeZoneView<'static> { - type Reborrowed<'b> = TimeZoneView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(TimeZoneView); +::buffa::impl_view_reborrow!(TimeZoneView); /** Self-contained, `'static` owned view of a `TimeZone` message. Wraps [`::buffa::OwnedView`]`<`[`TimeZoneView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -995,8 +834,14 @@ impl TimeZoneOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::TimeZone { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.rs b/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.rs index 1f089f6bf..442f34da2 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/google.type.datetime.rs @@ -129,12 +129,7 @@ impl DateTime { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/google.type.DateTime"; } -impl ::buffa::DefaultInstance for DateTime { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(DateTime); impl ::buffa::MessageName for DateTime { const PACKAGE: &'static str = "google.type"; const NAME: &'static str = "DateTime"; @@ -203,58 +198,42 @@ impl ::buffa::Message for DateTime { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.year != 0i32 { - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.year, buf); + ::buffa::types::put_int32_field(1u32, self.year, buf); } if self.month != 0i32 { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.month, buf); + ::buffa::types::put_int32_field(2u32, self.month, buf); } if self.day != 0i32 { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.day, buf); + ::buffa::types::put_int32_field(3u32, self.day, buf); } if self.hours != 0i32 { - ::buffa::encoding::Tag::new(4u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.hours, buf); + ::buffa::types::put_int32_field(4u32, self.hours, buf); } if self.minutes != 0i32 { - ::buffa::encoding::Tag::new(5u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.minutes, buf); + ::buffa::types::put_int32_field(5u32, self.minutes, buf); } if self.seconds != 0i32 { - ::buffa::encoding::Tag::new(6u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.seconds, buf); + ::buffa::types::put_int32_field(6u32, self.seconds, buf); } if self.nanos != 0i32 { - ::buffa::encoding::Tag::new(7u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(self.nanos, buf); + ::buffa::types::put_int32_field(7u32, self.nanos, buf); } if let ::core::option::Option::Some(ref v) = self.time_offset { match v { __buffa::oneof::date_time::TimeOffset::UtcOffset(x) => { - ::buffa::encoding::Tag::new( - 8u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 8u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::date_time::TimeOffset::TimeZone(x) => { - ::buffa::encoding::Tag::new( - 9u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 9u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -264,7 +243,7 @@ impl ::buffa::Message for DateTime { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -272,95 +251,67 @@ impl ::buffa::Message for DateTime { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.year = ::buffa::types::decode_int32(buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.month = ::buffa::types::decode_int32(buf)?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.day = ::buffa::types::decode_int32(buf)?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.hours = ::buffa::types::decode_int32(buf)?; } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.minutes = ::buffa::types::decode_int32(buf)?; } 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.seconds = ::buffa::types::decode_int32(buf)?; } 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.nanos = ::buffa::types::decode_int32(buf)?; } 8u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 8u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::date_time::TimeOffset::UtcOffset(ref mut existing), ) = self.time_offset { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.time_offset = ::core::option::Option::Some( __buffa::oneof::date_time::TimeOffset::UtcOffset( ::buffa::alloc::boxed::Box::new(val), @@ -369,25 +320,18 @@ impl ::buffa::Message for DateTime { } } 9u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 9u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::date_time::TimeOffset::TimeZone(ref mut existing), ) = self.time_offset { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.time_offset = ::core::option::Option::Some( __buffa::oneof::date_time::TimeOffset::TimeZone( ::buffa::alloc::boxed::Box::new(val), @@ -396,7 +340,7 @@ impl ::buffa::Message for DateTime { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -696,12 +640,7 @@ impl TimeZone { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/google.type.TimeZone"; } -impl ::buffa::DefaultInstance for TimeZone { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(TimeZone); impl ::buffa::MessageName for TimeZone { const PACKAGE: &'static str = "google.type"; const NAME: &'static str = "TimeZone"; @@ -735,27 +674,17 @@ impl ::buffa::Message for TimeZone { #[allow(unused_imports)] use ::buffa::Enumeration as _; if !self.id.is_empty() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.id, buf); + ::buffa::types::put_string_field(1u32, &self.id, buf); } if !self.version.is_empty() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.version, buf); + ::buffa::types::put_string_field(2u32, &self.version, buf); } } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -763,27 +692,21 @@ impl ::buffa::Message for TimeZone { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.version, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.__view.rs index d89c6035f..6b73f3ba2 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.__view.rs @@ -36,98 +36,71 @@ pub struct ContentView<'a> { /// Field 2: `data` pub data: &'a [u8], } -impl<'a> ContentView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ContentView<'a> { + type Owned = super::super::Content; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.content_type = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.data = ::buffa::types::borrow_bytes(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.content_type = ::buffa::types::borrow_str(&mut cur)?; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.data = ::buffa::types::borrow_bytes(&mut cur)?; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ContentView<'a> { - type Owned = super::super::Content; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + ::core::result::Result::Ok(cur) } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::Content { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Content { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Content { + ::core::result::Result::Ok(super::super::Content { content_type: self.content_type.to_string(), data: (self.data).to_vec(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ContentView<'a> { @@ -153,20 +126,10 @@ impl<'a> ::buffa::ViewEncode<'a> for ContentView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if !self.content_type.is_empty() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.content_type, buf); + ::buffa::types::put_string_field(1u32, &self.content_type, buf); } if !self.data.is_empty() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_bytes(&self.data, buf); + ::buffa::types::put_bytes_field(2u32, &self.data, buf); } } } @@ -192,16 +155,7 @@ impl<'__a> ::serde::Serialize for ContentView<'__a> { __map.serialize_entry("contentType", self.content_type)?; } if !::buffa::json_helpers::skip_if::is_empty_bytes(self.data) { - struct _W<'__x>(&'__x [u8]); - impl ::serde::Serialize for _W<'_> { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::bytes::serialize(self.0, __s) - } - } - __map.serialize_entry("data", &_W(self.data))?; + __map.serialize_entry("data", &::buffa::json_helpers::BytesJson(self.data))?; } __map.end() } @@ -212,24 +166,8 @@ impl<'a> ::buffa::MessageName for ContentView<'a> { const FULL_NAME: &'static str = "trogon.content.v1alpha1.Content"; const TYPE_URL: &'static str = "type.googleapis.com/trogon.content.v1alpha1.Content"; } -impl<'v> ::buffa::DefaultViewInstance for ContentView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ContentView<'static> { - type Reborrowed<'b> = ContentView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ContentView); +::buffa::impl_view_reborrow!(ContentView); /** Self-contained, `'static` owned view of a `Content` message. Wraps [`::buffa::OwnedView`]`<`[`ContentView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -286,8 +224,14 @@ impl ContentOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Content { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.rs index 59ee57be6..f71e350c4 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogon.content.v1alpha1.content.rs @@ -64,12 +64,7 @@ impl Content { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogon.content.v1alpha1.Content"; } -impl ::buffa::DefaultInstance for Content { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Content); impl ::buffa::MessageName for Content { const PACKAGE: &'static str = "trogon.content.v1alpha1"; const NAME: &'static str = "Content"; @@ -103,27 +98,17 @@ impl ::buffa::Message for Content { #[allow(unused_imports)] use ::buffa::Enumeration as _; if !self.content_type.is_empty() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.content_type, buf); + ::buffa::types::put_string_field(1u32, &self.content_type, buf); } if !self.data.is_empty() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_bytes(&self.data, buf); + ::buffa::types::put_bytes_field(2u32, &self.data, buf); } } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -131,27 +116,21 @@ impl ::buffa::Message for Content { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.content_type, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_bytes(&mut self.data, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.__view.rs index 6798ea6e0..a3741baf4 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.__view.rs @@ -29,204 +29,157 @@ pub struct ScheduleCheckpointView<'a> { /// Field 8: `message` pub message: ::buffa::MessageFieldView>, } -impl<'a> ScheduleCheckpointView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleCheckpointView<'a> { + type Owned = super::super::ScheduleCheckpoint; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = Some(::buffa::types::borrow_str(&mut cur)?); - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.status = Some( - ::buffa::EnumValue::from(::buffa::types::decode_int32(&mut cur)?), - ); - } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.last_applied_stream_position = Some( - ::buffa::types::decode_uint64(&mut cur)?, - ); - } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.last_applied_event_id = Some( - ::buffa::types::borrow_str(&mut cur)?, - ); - } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.last_outcome = Some( - ::buffa::EnumValue::from(::buffa::types::decode_int32(&mut cur)?), - ); - } - 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = Some(::buffa::types::borrow_str(&mut cur)?); + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.status = Some( + ::buffa::EnumValue::from(::buffa::types::decode_int32(&mut cur)?), + ); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.last_applied_stream_position = Some( + ::buffa::types::decode_uint64(&mut cur)?, + ); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.last_applied_event_id = Some(::buffa::types::borrow_str(&mut cur)?); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.last_outcome = Some( + ::buffa::EnumValue::from(::buffa::types::decode_int32(&mut cur)?), + ); + } + 6u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.schedule.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.schedule.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.schedule = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.schedule = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 7u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.delivery.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.delivery.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.delivery = ::buffa::MessageFieldView::set( - super::super::__buffa::view::DeliveryView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.delivery = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 8u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 8u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 8u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.message.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.message.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.message = ::buffa::MessageFieldView::set( - super::super::__buffa::view::MessageView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.message = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleCheckpointView<'a> { - type Owned = super::super::ScheduleCheckpoint; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::ScheduleCheckpoint { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleCheckpoint { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleCheckpoint { + ::core::result::Result::Ok(super::super::ScheduleCheckpoint { schedule_id: self.schedule_id.map(|s| s.to_string()), status: self.status, last_applied_stream_position: self.last_applied_stream_position, @@ -236,7 +189,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleCheckpointView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Schedule, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -244,7 +197,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleCheckpointView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Delivery, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -252,12 +205,12 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleCheckpointView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Message, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleCheckpointView<'a> { @@ -316,61 +269,30 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleCheckpointView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if let Some(ref v) = self.schedule_id { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(v, buf); + ::buffa::types::put_string_field(1u32, v, buf); } if let Some(ref v) = self.status { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(v.to_i32(), buf); + ::buffa::types::put_int32_field(2u32, v.to_i32(), buf); } if let Some(v) = self.last_applied_stream_position { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(3u32, v, buf); } if let Some(ref v) = self.last_applied_event_id { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(v, buf); + ::buffa::types::put_string_field(4u32, v, buf); } if let Some(ref v) = self.last_outcome { - ::buffa::encoding::Tag::new(5u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(v.to_i32(), buf); + ::buffa::types::put_int32_field(5u32, v.to_i32(), buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 6u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(6u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 7u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(7u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 8u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(8u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -400,16 +322,11 @@ impl<'__a> ::serde::Serialize for ScheduleCheckpointView<'__a> { __map.serialize_entry("status", __v)?; } if let ::core::option::Option::Some(__v) = self.last_applied_stream_position { - struct _W(u64); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::uint64::serialize(&self.0, __s) - } - } - __map.serialize_entry("lastAppliedStreamPosition", &_W(__v))?; + __map + .serialize_entry( + "lastAppliedStreamPosition", + &::buffa::json_helpers::ProtoJson(&__v), + )?; } if let ::core::option::Option::Some(__v) = self.last_applied_event_id { __map.serialize_entry("lastAppliedEventId", __v)?; @@ -441,24 +358,8 @@ impl<'a> ::buffa::MessageName for ScheduleCheckpointView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.ScheduleCheckpoint"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.ScheduleCheckpoint"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleCheckpointView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleCheckpointView<'static> { - type Reborrowed<'b> = ScheduleCheckpointView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleCheckpointView); +::buffa::impl_view_reborrow!(ScheduleCheckpointView); /** Self-contained, `'static` owned view of a `ScheduleCheckpoint` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleCheckpointView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -521,8 +422,14 @@ impl ScheduleCheckpointOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleCheckpoint { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.rs index 516b63e4c..26de6a303 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.checkpoint.rs @@ -539,12 +539,7 @@ impl ScheduleCheckpoint { self } } -impl ::buffa::DefaultInstance for ScheduleCheckpoint { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleCheckpoint); impl ::buffa::MessageName for ScheduleCheckpoint { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "ScheduleCheckpoint"; @@ -611,61 +606,30 @@ impl ::buffa::Message for ScheduleCheckpoint { #[allow(unused_imports)] use ::buffa::Enumeration as _; if let Some(ref v) = self.schedule_id { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(v, buf); + ::buffa::types::put_string_field(1u32, v, buf); } if let Some(ref v) = self.status { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(v.to_i32(), buf); + ::buffa::types::put_int32_field(2u32, v.to_i32(), buf); } if let Some(v) = self.last_applied_stream_position { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(3u32, v, buf); } if let Some(ref v) = self.last_applied_event_id { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(v, buf); + ::buffa::types::put_string_field(4u32, v, buf); } if let Some(ref v) = self.last_outcome { - ::buffa::encoding::Tag::new(5u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(v.to_i32(), buf); + ::buffa::types::put_int32_field(5u32, v.to_i32(), buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 6u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(6u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 7u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(7u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 8u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(8u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -673,7 +637,7 @@ impl ::buffa::Message for ScheduleCheckpoint { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -681,13 +645,10 @@ impl ::buffa::Message for ScheduleCheckpoint { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string( self .schedule_id @@ -696,37 +657,28 @@ impl ::buffa::Message for ScheduleCheckpoint { )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.status = ::core::option::Option::Some( ::buffa::EnumValue::from(::buffa::types::decode_int32(buf)?), ); } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.last_applied_stream_position = ::core::option::Option::Some( ::buffa::types::decode_uint64(buf)?, ); } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string( self .last_applied_event_id @@ -735,61 +687,49 @@ impl ::buffa::Message for ScheduleCheckpoint { )?; } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.last_outcome = ::core::option::Option::Some( ::buffa::EnumValue::from(::buffa::types::decode_int32(buf)?), ); } 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.schedule.get_or_insert_default(), buf, - depth, + ctx, )?; } 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.delivery.get_or_insert_default(), buf, - depth, + ctx, )?; } 8u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 8u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.message.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.__view.rs index aabee44a9..6fcc842ce 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.__view.rs @@ -8,122 +8,104 @@ pub struct DeliveryView<'a> { super::super::__buffa::view::oneof::delivery::Kind<'a>, >, } -impl<'a> DeliveryView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for DeliveryView<'a> { + type Owned = super::super::Delivery; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::delivery::NatsMessageView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for DeliveryView<'a> { - type Owned = super::super::Delivery; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Delivery { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Delivery { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Delivery { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - v, - ) => { - super::super::__buffa::oneof::delivery::Kind::NatsMessage( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::Delivery { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( + v, + ) => { + super::super::__buffa::oneof::delivery::Kind::NatsMessage( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for DeliveryView<'a> { @@ -157,12 +139,11 @@ impl<'a> ::buffa::ViewEncode<'a> for DeliveryView<'a> { if let ::core::option::Option::Some(ref v) = self.kind { match v { super::super::__buffa::view::oneof::delivery::Kind::NatsMessage(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -203,24 +184,8 @@ impl<'a> ::buffa::MessageName for DeliveryView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Delivery"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery"; } -impl<'v> ::buffa::DefaultViewInstance for DeliveryView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for DeliveryView<'static> { - type Reborrowed<'b> = DeliveryView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(DeliveryView); +::buffa::impl_view_reborrow!(DeliveryView); /** Self-contained, `'static` owned view of a `Delivery` message. Wraps [`::buffa::OwnedView`]`<`[`DeliveryView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -277,8 +242,14 @@ impl DeliveryOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Delivery { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -346,147 +317,138 @@ pub mod delivery { pub source: ::buffa::MessageFieldView< super::super::super::__buffa::view::delivery::nats_message::SourceView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> NatsMessageView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `subject` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_subject(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + } + impl<'a> ::buffa::MessageView<'a> for NatsMessageView<'a> { + type Owned = super::super::super::delivery::NatsMessage; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.subject = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.subject = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.ttl.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.ttl.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.ttl = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.ttl = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 3u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.source.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.source.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.source = ::buffa::MessageFieldView::set( - super::super::super::__buffa::view::delivery::nats_message::SourceView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.source = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for NatsMessageView<'a> { - type Owned = super::super::super::delivery::NatsMessage; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::delivery::NatsMessage { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::delivery::NatsMessage { + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::delivery::NatsMessage { + ::core::result::Result::Ok(super::super::super::delivery::NatsMessage { subject: self.subject.to_string(), ttl: match self.ttl.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Duration, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -494,12 +456,12 @@ pub mod delivery { Some(v) => { ::buffa::MessageField::< super::super::super::delivery::nats_message::Source, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for NatsMessageView<'a> { @@ -535,28 +497,21 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); if self.ttl.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.ttl.write_to(__cache, buf); } if self.source.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.source.write_to(__cache, buf); } } @@ -601,24 +556,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage"; } - impl<'v> ::buffa::DefaultViewInstance for NatsMessageView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for NatsMessageView<'static> { - type Reborrowed<'b> = NatsMessageView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(NatsMessageView); + ::buffa::impl_view_reborrow!(NatsMessageView); /** Self-contained, `'static` owned view of a `NatsMessage` message. Wraps [`::buffa::OwnedView`]`<`[`NatsMessageView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -679,8 +618,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::delivery::NatsMessage { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -758,128 +706,114 @@ pub mod delivery { >, >, } - impl<'a> SourceView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + impl<'a> ::buffa::MessageView<'a> for SourceView<'a> { + type Owned = super::super::super::super::delivery::nats_message::Source; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new( + ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT, + ); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ::buffa::alloc::boxed::Box::new( - super::super::super::super::__buffa::view::delivery::nats_message::LatestFromSubjectView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for SourceView<'a> { - type Owned = super::super::super::super::delivery::nats_message::Source; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::super::delivery::nats_message::Source { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - v, - ) => { - super::super::super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::super::super::delivery::nats_message::Source { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + v, + ) => { + super::super::super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for SourceView<'a> { @@ -917,13 +851,9 @@ pub mod delivery { super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint( - __cache.consume_next() as u64, + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), buf, ); x.write_to(__cache, buf); @@ -968,24 +898,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage.Source"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage.Source"; } - impl<'v> ::buffa::DefaultViewInstance for SourceView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for SourceView<'static> { - type Reborrowed<'b> = SourceView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(SourceView); + ::buffa::impl_view_reborrow!(SourceView); /** Self-contained, `'static` owned view of a `Source` message. Wraps [`::buffa::OwnedView`]`<`[`SourceView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1046,10 +960,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1109,62 +1030,17 @@ pub mod delivery { pub struct LatestFromSubjectView<'a> { /// Field 1: `subject` pub subject: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> LatestFromSubjectView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.subject = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `subject` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_subject(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for LatestFromSubjectView<'a> { @@ -1172,31 +1048,69 @@ pub mod delivery { fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new( + ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT, + ); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.subject = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::super::delivery::nats_message::LatestFromSubject { + ::core::result::Result::Ok(super::super::super::super::delivery::nats_message::LatestFromSubject { subject: self.subject.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for LatestFromSubjectView<'a> { @@ -1216,12 +1130,7 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); } } /// Serializes this view as protobuf JSON. @@ -1254,26 +1163,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage.LatestFromSubject"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage.LatestFromSubject"; } - impl<'v> ::buffa::DefaultViewInstance for LatestFromSubjectView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox< - LatestFromSubjectView<'static>, - > = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for LatestFromSubjectView<'static> { - type Reborrowed<'b> = LatestFromSubjectView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(LatestFromSubjectView); + ::buffa::impl_view_reborrow!(LatestFromSubjectView); /** Self-contained, `'static` owned view of a `LatestFromSubject` message. Wraps [`::buffa::OwnedView`]`<`[`LatestFromSubjectView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1336,10 +1227,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.rs index 8e3f0db3e..0e7cf67c0 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.delivery.rs @@ -21,12 +21,7 @@ impl Delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery"; } -impl ::buffa::DefaultInstance for Delivery { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Delivery); impl ::buffa::MessageName for Delivery { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Delivery"; @@ -68,12 +63,11 @@ impl ::buffa::Message for Delivery { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::delivery::Kind::NatsMessage(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -83,7 +77,7 @@ impl ::buffa::Message for Delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -91,25 +85,18 @@ impl ::buffa::Message for Delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::delivery::Kind::NatsMessage(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::delivery::Kind::NatsMessage( ::buffa::alloc::boxed::Box::new(val), @@ -118,7 +105,7 @@ impl ::buffa::Message for Delivery { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -243,12 +230,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage"; } - impl ::buffa::DefaultInstance for NatsMessage { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(NatsMessage); impl ::buffa::MessageName for NatsMessage { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Delivery.NatsMessage"; @@ -292,28 +274,21 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); if self.ttl.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.ttl.write_to(__cache, buf); } if self.source.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.source.write_to(__cache, buf); } } @@ -321,7 +296,7 @@ pub mod delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -329,45 +304,36 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.subject, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.ttl.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.source.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -422,12 +388,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage.Source"; } - impl ::buffa::DefaultInstance for Source { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Source); impl ::buffa::MessageName for Source { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Delivery.NatsMessage.Source"; @@ -473,13 +434,9 @@ pub mod delivery { super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint( - __cache.consume_next() as u64, + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), buf, ); x.write_to(__cache, buf); @@ -491,7 +448,7 @@ pub mod delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -499,15 +456,10 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( ref mut existing, @@ -517,14 +469,14 @@ pub mod delivery { ::buffa::Message::merge_length_delimited( &mut **existing, buf, - depth, + ctx, )?; } else { let mut val = ::core::default::Default::default(); ::buffa::Message::merge_length_delimited( &mut val, buf, - depth, + ctx, )?; self.kind = ::core::option::Option::Some( super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( @@ -534,7 +486,7 @@ pub mod delivery { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -657,12 +609,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Delivery.NatsMessage.LatestFromSubject"; } - impl ::buffa::DefaultInstance for LatestFromSubject { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(LatestFromSubject); impl ::buffa::MessageName for LatestFromSubject { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Delivery.NatsMessage.LatestFromSubject"; @@ -690,18 +637,13 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -709,19 +651,14 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.subject, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.__view.rs index 1ff04b0cd..896cbbeed 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.__view.rs @@ -14,122 +14,103 @@ pub struct MessageView<'a> { pub headers: ::buffa::RepeatedView<'a, super::super::__buffa::view::HeaderView<'a>>, } impl<'a> MessageView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `content` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_content(&self) -> bool { + self.content.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { + type Owned = super::super::Message; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.content.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.content = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::trogon::content::v1alpha1::__buffa::view::ContentView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.content.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.headers - .push( - super::super::__buffa::view::HeaderView::_decode_depth( + None => { + view.content = ::buffa::MessageFieldView::set( + ::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + } } } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.headers + .push( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { - type Owned = super::super::Message; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Message { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Message { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Message { + ::core::result::Result::Ok(super::super::Message { content: match self.content.as_option() { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::trogon::content::v1alpha1::Content, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -137,9 +118,9 @@ impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { .headers .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for MessageView<'a> { @@ -175,21 +156,11 @@ impl<'a> ::buffa::ViewEncode<'a> for MessageView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.content.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(1u32, __cache.consume_next(), buf); self.content.write_to(__cache, buf); } for v in &self.headers { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); v.write_to(__cache, buf); } } @@ -229,24 +200,8 @@ impl<'a> ::buffa::MessageName for MessageView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Message"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Message"; } -impl<'v> ::buffa::DefaultViewInstance for MessageView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for MessageView<'static> { - type Reborrowed<'b> = MessageView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(MessageView); +::buffa::impl_view_reborrow!(MessageView); /** Self-contained, `'static` owned view of a `Message` message. Wraps [`::buffa::OwnedView`]`<`[`MessageView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -303,8 +258,14 @@ impl MessageOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Message { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -372,99 +333,94 @@ pub struct HeaderView<'a> { pub name: &'a str, /// Field 2: `value` pub value: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> HeaderView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + /**Whether required field `name` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_name(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.name = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.value = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `value` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_value(&self) -> bool { + self.__buffa_required_seen_0 & 2u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for HeaderView<'a> { type Owned = super::super::Header; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.name = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.value = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 2u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Header { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Header { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Header { + ::core::result::Result::Ok(super::super::Header { name: self.name.to_string(), value: self.value.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for HeaderView<'a> { @@ -485,12 +441,8 @@ impl<'a> ::buffa::ViewEncode<'a> for HeaderView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.name, buf); - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.value, buf); + ::buffa::types::put_string_field(1u32, &self.name, buf); + ::buffa::types::put_string_field(2u32, &self.value, buf); } } /// Serializes this view as protobuf JSON. @@ -526,24 +478,8 @@ impl<'a> ::buffa::MessageName for HeaderView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Header"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Header"; } -impl<'v> ::buffa::DefaultViewInstance for HeaderView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for HeaderView<'static> { - type Reborrowed<'b> = HeaderView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(HeaderView); +::buffa::impl_view_reborrow!(HeaderView); /** Self-contained, `'static` owned view of a `Header` message. Wraps [`::buffa::OwnedView`]`<`[`HeaderView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -598,8 +534,14 @@ impl HeaderOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Header { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.rs index 1060c31ba..15709495d 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.message.rs @@ -34,12 +34,7 @@ impl Message { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Message"; } -impl ::buffa::DefaultInstance for Message { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Message); impl ::buffa::MessageName for Message { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Message"; @@ -83,21 +78,11 @@ impl ::buffa::Message for Message { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.content.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(1u32, __cache.consume_next(), buf); self.content.write_to(__cache, buf); } for v in &self.headers { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); v.write_to(__cache, buf); } } @@ -105,7 +90,7 @@ impl ::buffa::Message for Message { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -113,33 +98,27 @@ impl ::buffa::Message for Message { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.content.get_or_insert_default(), buf, - depth, + ctx, )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.headers.push(elem); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -195,12 +174,7 @@ impl Header { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Header"; } -impl ::buffa::DefaultInstance for Header { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox
= ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Header); impl ::buffa::MessageName for Header { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Header"; @@ -229,18 +203,14 @@ impl ::buffa::Message for Header { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.name, buf); - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.value, buf); + ::buffa::types::put_string_field(1u32, &self.name, buf); + ::buffa::types::put_string_field(2u32, &self.value, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -248,27 +218,21 @@ impl ::buffa::Message for Header { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.name, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.value, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.__view.rs index 5772c6fed..900a9a645 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.__view.rs @@ -8,237 +8,222 @@ pub struct ScheduleView<'a> { super::super::__buffa::view::oneof::schedule::Kind<'a>, >, } -impl<'a> ScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleView<'a> { + type Owned = super::super::Schedule; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::At( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::At( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::At( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::AtView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Every( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Every( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Every( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::EveryView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Cron( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Cron( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Cron( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::CronView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Rrule( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Rrule( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Rrule( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::RRuleView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleView<'a> { - type Owned = super::super::Schedule; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Schedule { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Schedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Schedule { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::schedule::Kind::At(v) => { - super::super::__buffa::oneof::schedule::Kind::At( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Every(v) => { - super::super::__buffa::oneof::schedule::Kind::Every( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Cron(v) => { - super::super::__buffa::oneof::schedule::Kind::Cron( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Rrule(v) => { - super::super::__buffa::oneof::schedule::Kind::Rrule( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::Schedule { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::schedule::Kind::At(v) => { + super::super::__buffa::oneof::schedule::Kind::At( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Every( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Every( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Cron( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Cron( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Rrule( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Rrule( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleView<'a> { @@ -296,39 +281,35 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleView<'a> { if let ::core::option::Option::Some(ref v) = self.kind { match v { super::super::__buffa::view::oneof::schedule::Kind::At(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Every(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Cron(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Rrule(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -378,24 +359,8 @@ impl<'a> ::buffa::MessageName for ScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Schedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleView<'static> { - type Reborrowed<'b> = ScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleView); +::buffa::impl_view_reborrow!(ScheduleView); /** Self-contained, `'static` owned view of a `Schedule` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -452,8 +417,14 @@ impl ScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Schedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -517,111 +488,105 @@ pub mod schedule { >, } impl<'a> AtView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_at(&self) -> bool { + self.at.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for AtView<'a> { + type Owned = super::super::super::schedule::At; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for AtView<'a> { - type Owned = super::super::super::schedule::At; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule::At { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::At { + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::At { + ::core::result::Result::Ok(super::super::super::schedule::At { at: match self.at.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for AtView<'a> { @@ -649,12 +614,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.at.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.at.write_to(__cache, buf); } } @@ -691,24 +655,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Schedule.At"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.At"; } - impl<'v> ::buffa::DefaultViewInstance for AtView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for AtView<'static> { - type Reborrowed<'b> = AtView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(AtView); + ::buffa::impl_view_reborrow!(AtView); /** Self-contained, `'static` owned view of a `At` message. Wraps [`::buffa::OwnedView`]`<`[`AtView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -763,8 +711,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::At { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -822,111 +779,105 @@ pub mod schedule { >, } impl<'a> EveryView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `every` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_every(&self) -> bool { + self.every.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for EveryView<'a> { + type Owned = super::super::super::schedule::Every; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.every.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.every.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.every = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.every = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } - } - impl<'a> ::buffa::MessageView<'a> for EveryView<'a> { - type Owned = super::super::super::schedule::Every; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::super::schedule::Every { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::Every { + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::Every { + ::core::result::Result::Ok(super::super::super::schedule::Every { every: match self.every.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Duration, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for EveryView<'a> { @@ -954,12 +905,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.every.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.every.write_to(__cache, buf); } } @@ -996,24 +946,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Schedule.Every"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.Every"; } - impl<'v> ::buffa::DefaultViewInstance for EveryView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for EveryView<'static> { - type Reborrowed<'b> = EveryView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(EveryView); + ::buffa::impl_view_reborrow!(EveryView); /** Self-contained, `'static` owned view of a `Every` message. Wraps [`::buffa::OwnedView`]`<`[`EveryView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1072,8 +1006,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::Every { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1136,88 +1079,25 @@ pub mod schedule { 'a, >, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> CronView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + /**Whether required field `expr` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_expr(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.expr = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.timezone.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.timezone = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::super::google::r#type::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `timezone` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_timezone(&self) -> bool { + self.timezone.is_set() } } impl<'a> ::buffa::MessageView<'a> for CronView<'a> { @@ -1225,37 +1105,100 @@ pub mod schedule { fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.expr = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.timezone.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? + } + None => { + view.timezone = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule::Cron { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::Cron { + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::Cron { + ::core::result::Result::Ok(super::super::super::schedule::Cron { expr: self.expr.to_string(), timezone: match self.timezone.as_option() { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::super::google::r#type::TimeZone, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for CronView<'a> { @@ -1283,19 +1226,13 @@ pub mod schedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.expr, buf); + ::buffa::types::put_string_field(1u32, &self.expr, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } } @@ -1335,24 +1272,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Schedule.Cron"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.Cron"; } - impl<'v> ::buffa::DefaultViewInstance for CronView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for CronView<'static> { - type Reborrowed<'b> = CronView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(CronView); + ::buffa::impl_view_reborrow!(CronView); /** Self-contained, `'static` owned view of a `Cron` message. Wraps [`::buffa::OwnedView`]`<`[`CronView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1409,8 +1330,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::Cron { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1492,190 +1422,183 @@ pub mod schedule { 'a, ::buffa_types::google::protobuf::__buffa::view::TimestampView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> RRuleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `dtstart` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_dtstart(&self) -> bool { + self.dtstart.is_set() + } + /**Whether required field `rrule` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_rrule(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `timezone` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_timezone(&self) -> bool { + self.timezone.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for RRuleView<'a> { + type Owned = super::super::super::schedule::RRule; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.dtstart.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.dtstart = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.rrule = ::buffa::types::borrow_str(&mut cur)?; - } - 3u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.timezone.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.timezone = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::super::google::r#type::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 4u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.dtstart.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.rdate - .push( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( + None => { + view.dtstart = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - 5u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.rrule = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.timezone.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.exdate - .push( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( + None => { + view.timezone = ::buffa::MessageFieldView::set( + ::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + } } } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.rdate + .push( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.exdate + .push( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } - } - impl<'a> ::buffa::MessageView<'a> for RRuleView<'a> { - type Owned = super::super::super::schedule::RRule; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::super::schedule::RRule { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::RRule { + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::RRule { + ::core::result::Result::Ok(super::super::super::schedule::RRule { dtstart: match self.dtstart.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -1684,7 +1607,7 @@ pub mod schedule { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::super::google::r#type::TimeZone, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -1692,14 +1615,14 @@ pub mod schedule { .rdate .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, exdate: self .exdate .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for RRuleView<'a> { @@ -1752,45 +1675,36 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.dtstart.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.dtstart.write_to(__cache, buf); } - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.rrule, buf); + ::buffa::types::put_string_field(2u32, &self.rrule, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } for v in &self.rdate { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } for v in &self.exdate { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } } @@ -1841,24 +1755,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.checkpoints.v1.Schedule.RRule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.RRule"; } - impl<'v> ::buffa::DefaultViewInstance for RRuleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for RRuleView<'static> { - type Reborrowed<'b> = RRuleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(RRuleView); + ::buffa::impl_view_reborrow!(RRuleView); /** Self-contained, `'static` owned view of a `RRule` message. Wraps [`::buffa::OwnedView`]`<`[`RRuleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1917,8 +1815,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::RRule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.rs index 26bce21df..edc5d0a57 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.checkpoints.v1.schedule.rs @@ -21,12 +21,7 @@ impl Schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule"; } -impl ::buffa::DefaultInstance for Schedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Schedule); impl ::buffa::MessageName for Schedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Schedule"; @@ -92,39 +87,35 @@ impl ::buffa::Message for Schedule { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::schedule::Kind::At(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Every(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Cron(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Rrule(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -134,7 +125,7 @@ impl ::buffa::Message for Schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -142,25 +133,18 @@ impl ::buffa::Message for Schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::At(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::At( ::buffa::alloc::boxed::Box::new(val), @@ -169,25 +153,18 @@ impl ::buffa::Message for Schedule { } } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Every(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Every( ::buffa::alloc::boxed::Box::new(val), @@ -196,25 +173,18 @@ impl ::buffa::Message for Schedule { } } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Cron(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Cron( ::buffa::alloc::boxed::Box::new(val), @@ -223,25 +193,18 @@ impl ::buffa::Message for Schedule { } } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Rrule(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Rrule( ::buffa::alloc::boxed::Box::new(val), @@ -250,7 +213,7 @@ impl ::buffa::Message for Schedule { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -431,12 +394,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.At"; } - impl ::buffa::DefaultInstance for At { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(At); impl ::buffa::MessageName for At { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Schedule.At"; @@ -472,12 +430,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.at.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.at.write_to(__cache, buf); } } @@ -485,7 +442,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -493,21 +450,18 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.at.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -556,12 +510,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.Every"; } - impl ::buffa::DefaultInstance for Every { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Every); impl ::buffa::MessageName for Every { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Schedule.Every"; @@ -597,12 +546,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.every.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.every.write_to(__cache, buf); } } @@ -610,7 +558,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -618,21 +566,18 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.every.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -689,12 +634,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.Cron"; } - impl ::buffa::DefaultInstance for Cron { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Cron); impl ::buffa::MessageName for Cron { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Schedule.Cron"; @@ -730,19 +670,13 @@ pub mod schedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.expr, buf); + ::buffa::types::put_string_field(1u32, &self.expr, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } } @@ -750,7 +684,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -758,31 +692,25 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.expr, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.timezone.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -860,12 +788,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.checkpoints.v1.Schedule.RRule"; } - impl ::buffa::DefaultInstance for RRule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(RRule); impl ::buffa::MessageName for RRule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.checkpoints.v1"; const NAME: &'static str = "Schedule.RRule"; @@ -926,45 +849,36 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.dtstart.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.dtstart.write_to(__cache, buf); } - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.rrule, buf); + ::buffa::types::put_string_field(2u32, &self.rrule, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } for v in &self.rdate { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } for v in &self.exdate { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } } @@ -972,7 +886,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -980,69 +894,54 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.dtstart.get_or_insert_default(), buf, - depth, + ctx, )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.rrule, buf)?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.timezone.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.rdate.push(elem); } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.exdate.push(elem); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.__view.rs index 13271a07c..f38436b77 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.__view.rs @@ -13,122 +13,104 @@ pub struct DeliveryView<'a> { super::super::__buffa::view::oneof::delivery::Kind<'a>, >, } -impl<'a> DeliveryView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for DeliveryView<'a> { + type Owned = super::super::Delivery; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::delivery::NatsMessageView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for DeliveryView<'a> { - type Owned = super::super::Delivery; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Delivery { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Delivery { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Delivery { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - v, - ) => { - super::super::__buffa::oneof::delivery::Kind::NatsMessage( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::Delivery { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( + v, + ) => { + super::super::__buffa::oneof::delivery::Kind::NatsMessage( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for DeliveryView<'a> { @@ -162,12 +144,11 @@ impl<'a> ::buffa::ViewEncode<'a> for DeliveryView<'a> { if let ::core::option::Option::Some(ref v) = self.kind { match v { super::super::__buffa::view::oneof::delivery::Kind::NatsMessage(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -208,24 +189,8 @@ impl<'a> ::buffa::MessageName for DeliveryView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Delivery"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery"; } -impl<'v> ::buffa::DefaultViewInstance for DeliveryView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for DeliveryView<'static> { - type Reborrowed<'b> = DeliveryView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(DeliveryView); +::buffa::impl_view_reborrow!(DeliveryView); /** Self-contained, `'static` owned view of a `Delivery` message. Wraps [`::buffa::OwnedView`]`<`[`DeliveryView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -282,8 +247,14 @@ impl DeliveryOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Delivery { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -351,147 +322,138 @@ pub mod delivery { pub source: ::buffa::MessageFieldView< super::super::super::__buffa::view::delivery::nats_message::SourceView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> NatsMessageView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `subject` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_subject(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + } + impl<'a> ::buffa::MessageView<'a> for NatsMessageView<'a> { + type Owned = super::super::super::delivery::NatsMessage; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.subject = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.subject = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.ttl.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.ttl.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.ttl = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.ttl = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 3u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.source.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.source.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.source = ::buffa::MessageFieldView::set( - super::super::super::__buffa::view::delivery::nats_message::SourceView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.source = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for NatsMessageView<'a> { - type Owned = super::super::super::delivery::NatsMessage; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::delivery::NatsMessage { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::delivery::NatsMessage { + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::delivery::NatsMessage { + ::core::result::Result::Ok(super::super::super::delivery::NatsMessage { subject: self.subject.to_string(), ttl: match self.ttl.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Duration, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -499,12 +461,12 @@ pub mod delivery { Some(v) => { ::buffa::MessageField::< super::super::super::delivery::nats_message::Source, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for NatsMessageView<'a> { @@ -540,28 +502,21 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); if self.ttl.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.ttl.write_to(__cache, buf); } if self.source.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.source.write_to(__cache, buf); } } @@ -606,24 +561,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage"; } - impl<'v> ::buffa::DefaultViewInstance for NatsMessageView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for NatsMessageView<'static> { - type Reborrowed<'b> = NatsMessageView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(NatsMessageView); + ::buffa::impl_view_reborrow!(NatsMessageView); /** Self-contained, `'static` owned view of a `NatsMessage` message. Wraps [`::buffa::OwnedView`]`<`[`NatsMessageView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -684,8 +623,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::delivery::NatsMessage { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -763,128 +711,114 @@ pub mod delivery { >, >, } - impl<'a> SourceView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + impl<'a> ::buffa::MessageView<'a> for SourceView<'a> { + type Owned = super::super::super::super::delivery::nats_message::Source; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new( + ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT, + ); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ::buffa::alloc::boxed::Box::new( - super::super::super::super::__buffa::view::delivery::nats_message::LatestFromSubjectView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for SourceView<'a> { - type Owned = super::super::super::super::delivery::nats_message::Source; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::super::delivery::nats_message::Source { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - v, - ) => { - super::super::super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::super::super::delivery::nats_message::Source { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + v, + ) => { + super::super::super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for SourceView<'a> { @@ -922,13 +856,9 @@ pub mod delivery { super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint( - __cache.consume_next() as u64, + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), buf, ); x.write_to(__cache, buf); @@ -973,24 +903,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage.Source"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage.Source"; } - impl<'v> ::buffa::DefaultViewInstance for SourceView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for SourceView<'static> { - type Reborrowed<'b> = SourceView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(SourceView); + ::buffa::impl_view_reborrow!(SourceView); /** Self-contained, `'static` owned view of a `Source` message. Wraps [`::buffa::OwnedView`]`<`[`SourceView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1051,10 +965,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1114,62 +1035,17 @@ pub mod delivery { pub struct LatestFromSubjectView<'a> { /// Field 1: `subject` pub subject: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> LatestFromSubjectView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.subject = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `subject` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_subject(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for LatestFromSubjectView<'a> { @@ -1177,31 +1053,69 @@ pub mod delivery { fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new( + ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT, + ); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.subject = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::super::delivery::nats_message::LatestFromSubject { + ::core::result::Result::Ok(super::super::super::super::delivery::nats_message::LatestFromSubject { subject: self.subject.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for LatestFromSubjectView<'a> { @@ -1221,12 +1135,7 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); } } /// Serializes this view as protobuf JSON. @@ -1259,26 +1168,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage.LatestFromSubject"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage.LatestFromSubject"; } - impl<'v> ::buffa::DefaultViewInstance for LatestFromSubjectView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox< - LatestFromSubjectView<'static>, - > = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for LatestFromSubjectView<'static> { - type Reborrowed<'b> = LatestFromSubjectView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(LatestFromSubjectView); + ::buffa::impl_view_reborrow!(LatestFromSubjectView); /** Self-contained, `'static` owned view of a `LatestFromSubject` message. Wraps [`::buffa::OwnedView`]`<`[`LatestFromSubjectView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1341,10 +1232,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.rs index e3964a126..6c9d7710a 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.delivery.rs @@ -26,12 +26,7 @@ impl Delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery"; } -impl ::buffa::DefaultInstance for Delivery { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Delivery); impl ::buffa::MessageName for Delivery { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Delivery"; @@ -73,12 +68,11 @@ impl ::buffa::Message for Delivery { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::delivery::Kind::NatsMessage(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -88,7 +82,7 @@ impl ::buffa::Message for Delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -96,25 +90,18 @@ impl ::buffa::Message for Delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::delivery::Kind::NatsMessage(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::delivery::Kind::NatsMessage( ::buffa::alloc::boxed::Box::new(val), @@ -123,7 +110,7 @@ impl ::buffa::Message for Delivery { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -248,12 +235,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage"; } - impl ::buffa::DefaultInstance for NatsMessage { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(NatsMessage); impl ::buffa::MessageName for NatsMessage { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Delivery.NatsMessage"; @@ -297,28 +279,21 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); if self.ttl.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.ttl.write_to(__cache, buf); } if self.source.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.source.write_to(__cache, buf); } } @@ -326,7 +301,7 @@ pub mod delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -334,45 +309,36 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.subject, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.ttl.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.source.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -427,12 +393,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage.Source"; } - impl ::buffa::DefaultInstance for Source { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Source); impl ::buffa::MessageName for Source { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Delivery.NatsMessage.Source"; @@ -478,13 +439,9 @@ pub mod delivery { super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint( - __cache.consume_next() as u64, + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), buf, ); x.write_to(__cache, buf); @@ -496,7 +453,7 @@ pub mod delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -504,15 +461,10 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( ref mut existing, @@ -522,14 +474,14 @@ pub mod delivery { ::buffa::Message::merge_length_delimited( &mut **existing, buf, - depth, + ctx, )?; } else { let mut val = ::core::default::Default::default(); ::buffa::Message::merge_length_delimited( &mut val, buf, - depth, + ctx, )?; self.kind = ::core::option::Option::Some( super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( @@ -539,7 +491,7 @@ pub mod delivery { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -662,12 +614,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Delivery.NatsMessage.LatestFromSubject"; } - impl ::buffa::DefaultInstance for LatestFromSubject { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(LatestFromSubject); impl ::buffa::MessageName for LatestFromSubject { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Delivery.NatsMessage.LatestFromSubject"; @@ -695,18 +642,13 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -714,19 +656,14 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.subject, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.__view.rs index 7556933cf..6c4c3982c 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.__view.rs @@ -19,122 +19,103 @@ pub struct MessageView<'a> { pub headers: ::buffa::RepeatedView<'a, super::super::__buffa::view::HeaderView<'a>>, } impl<'a> MessageView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `content` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_content(&self) -> bool { + self.content.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { + type Owned = super::super::Message; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.content.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.content = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::trogon::content::v1alpha1::__buffa::view::ContentView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.content.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.headers - .push( - super::super::__buffa::view::HeaderView::_decode_depth( + None => { + view.content = ::buffa::MessageFieldView::set( + ::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + } } } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.headers + .push( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { - type Owned = super::super::Message; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Message { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Message { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Message { + ::core::result::Result::Ok(super::super::Message { content: match self.content.as_option() { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::trogon::content::v1alpha1::Content, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -142,9 +123,9 @@ impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { .headers .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for MessageView<'a> { @@ -180,21 +161,11 @@ impl<'a> ::buffa::ViewEncode<'a> for MessageView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.content.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(1u32, __cache.consume_next(), buf); self.content.write_to(__cache, buf); } for v in &self.headers { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); v.write_to(__cache, buf); } } @@ -234,24 +205,8 @@ impl<'a> ::buffa::MessageName for MessageView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Message"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Message"; } -impl<'v> ::buffa::DefaultViewInstance for MessageView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for MessageView<'static> { - type Reborrowed<'b> = MessageView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(MessageView); +::buffa::impl_view_reborrow!(MessageView); /** Self-contained, `'static` owned view of a `Message` message. Wraps [`::buffa::OwnedView`]`<`[`MessageView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -308,8 +263,14 @@ impl MessageOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Message { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -377,99 +338,94 @@ pub struct HeaderView<'a> { pub name: &'a str, /// Field 2: `value` pub value: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> HeaderView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + /**Whether required field `name` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_name(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.name = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.value = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `value` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_value(&self) -> bool { + self.__buffa_required_seen_0 & 2u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for HeaderView<'a> { type Owned = super::super::Header; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.name = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.value = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 2u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Header { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Header { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Header { + ::core::result::Result::Ok(super::super::Header { name: self.name.to_string(), value: self.value.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for HeaderView<'a> { @@ -490,12 +446,8 @@ impl<'a> ::buffa::ViewEncode<'a> for HeaderView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.name, buf); - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.value, buf); + ::buffa::types::put_string_field(1u32, &self.name, buf); + ::buffa::types::put_string_field(2u32, &self.value, buf); } } /// Serializes this view as protobuf JSON. @@ -531,24 +483,8 @@ impl<'a> ::buffa::MessageName for HeaderView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Header"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Header"; } -impl<'v> ::buffa::DefaultViewInstance for HeaderView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for HeaderView<'static> { - type Reborrowed<'b> = HeaderView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(HeaderView); +::buffa::impl_view_reborrow!(HeaderView); /** Self-contained, `'static` owned view of a `Header` message. Wraps [`::buffa::OwnedView`]`<`[`HeaderView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -603,8 +539,14 @@ impl HeaderOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Header { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.rs index f826dbf63..ddfa02284 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.message.rs @@ -39,12 +39,7 @@ impl Message { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Message"; } -impl ::buffa::DefaultInstance for Message { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Message); impl ::buffa::MessageName for Message { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Message"; @@ -88,21 +83,11 @@ impl ::buffa::Message for Message { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.content.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(1u32, __cache.consume_next(), buf); self.content.write_to(__cache, buf); } for v in &self.headers { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); v.write_to(__cache, buf); } } @@ -110,7 +95,7 @@ impl ::buffa::Message for Message { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -118,33 +103,27 @@ impl ::buffa::Message for Message { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.content.get_or_insert_default(), buf, - depth, + ctx, )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.headers.push(elem); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -200,12 +179,7 @@ impl Header { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Header"; } -impl ::buffa::DefaultInstance for Header { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox
= ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Header); impl ::buffa::MessageName for Header { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Header"; @@ -234,18 +208,14 @@ impl ::buffa::Message for Header { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.name, buf); - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.value, buf); + ::buffa::types::put_string_field(1u32, &self.name, buf); + ::buffa::types::put_string_field(2u32, &self.value, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -253,27 +223,21 @@ impl ::buffa::Message for Header { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.name, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.value, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.__view.rs index 646f887e9..1729463c6 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.__view.rs @@ -13,237 +13,222 @@ pub struct ScheduleView<'a> { super::super::__buffa::view::oneof::schedule::Kind<'a>, >, } -impl<'a> ScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleView<'a> { + type Owned = super::super::Schedule; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::At( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::At( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::At( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::AtView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Every( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Every( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Every( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::EveryView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Cron( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Cron( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Cron( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::CronView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Rrule( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Rrule( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Rrule( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::RRuleView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleView<'a> { - type Owned = super::super::Schedule; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Schedule { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Schedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Schedule { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::schedule::Kind::At(v) => { - super::super::__buffa::oneof::schedule::Kind::At( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Every(v) => { - super::super::__buffa::oneof::schedule::Kind::Every( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Cron(v) => { - super::super::__buffa::oneof::schedule::Kind::Cron( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Rrule(v) => { - super::super::__buffa::oneof::schedule::Kind::Rrule( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::Schedule { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::schedule::Kind::At(v) => { + super::super::__buffa::oneof::schedule::Kind::At( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Every( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Every( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Cron( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Cron( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Rrule( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Rrule( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleView<'a> { @@ -301,39 +286,35 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleView<'a> { if let ::core::option::Option::Some(ref v) = self.kind { match v { super::super::__buffa::view::oneof::schedule::Kind::At(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Every(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Cron(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Rrule(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -383,24 +364,8 @@ impl<'a> ::buffa::MessageName for ScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Schedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleView<'static> { - type Reborrowed<'b> = ScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleView); +::buffa::impl_view_reborrow!(ScheduleView); /** Self-contained, `'static` owned view of a `Schedule` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -457,8 +422,14 @@ impl ScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Schedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -522,111 +493,105 @@ pub mod schedule { >, } impl<'a> AtView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_at(&self) -> bool { + self.at.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for AtView<'a> { + type Owned = super::super::super::schedule::At; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for AtView<'a> { - type Owned = super::super::super::schedule::At; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule::At { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::At { + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::At { + ::core::result::Result::Ok(super::super::super::schedule::At { at: match self.at.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for AtView<'a> { @@ -654,12 +619,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.at.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.at.write_to(__cache, buf); } } @@ -696,24 +660,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Schedule.At"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.At"; } - impl<'v> ::buffa::DefaultViewInstance for AtView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for AtView<'static> { - type Reborrowed<'b> = AtView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(AtView); + ::buffa::impl_view_reborrow!(AtView); /** Self-contained, `'static` owned view of a `At` message. Wraps [`::buffa::OwnedView`]`<`[`AtView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -768,8 +716,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::At { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -827,111 +784,105 @@ pub mod schedule { >, } impl<'a> EveryView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `every` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_every(&self) -> bool { + self.every.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for EveryView<'a> { + type Owned = super::super::super::schedule::Every; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.every.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.every.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.every = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.every = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } - } - impl<'a> ::buffa::MessageView<'a> for EveryView<'a> { - type Owned = super::super::super::schedule::Every; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::super::schedule::Every { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::Every { + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::Every { + ::core::result::Result::Ok(super::super::super::schedule::Every { every: match self.every.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Duration, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for EveryView<'a> { @@ -959,12 +910,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.every.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.every.write_to(__cache, buf); } } @@ -1001,24 +951,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Schedule.Every"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.Every"; } - impl<'v> ::buffa::DefaultViewInstance for EveryView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for EveryView<'static> { - type Reborrowed<'b> = EveryView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(EveryView); + ::buffa::impl_view_reborrow!(EveryView); /** Self-contained, `'static` owned view of a `Every` message. Wraps [`::buffa::OwnedView`]`<`[`EveryView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1077,8 +1011,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::Every { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1141,88 +1084,25 @@ pub mod schedule { 'a, >, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> CronView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + /**Whether required field `expr` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_expr(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.expr = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.timezone.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.timezone = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::super::google::r#type::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `timezone` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_timezone(&self) -> bool { + self.timezone.is_set() } } impl<'a> ::buffa::MessageView<'a> for CronView<'a> { @@ -1230,37 +1110,100 @@ pub mod schedule { fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.expr = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.timezone.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? + } + None => { + view.timezone = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule::Cron { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::Cron { + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::Cron { + ::core::result::Result::Ok(super::super::super::schedule::Cron { expr: self.expr.to_string(), timezone: match self.timezone.as_option() { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::super::google::r#type::TimeZone, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for CronView<'a> { @@ -1288,19 +1231,13 @@ pub mod schedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.expr, buf); + ::buffa::types::put_string_field(1u32, &self.expr, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } } @@ -1340,24 +1277,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Schedule.Cron"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.Cron"; } - impl<'v> ::buffa::DefaultViewInstance for CronView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for CronView<'static> { - type Reborrowed<'b> = CronView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(CronView); + ::buffa::impl_view_reborrow!(CronView); /** Self-contained, `'static` owned view of a `Cron` message. Wraps [`::buffa::OwnedView`]`<`[`CronView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1414,8 +1335,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::Cron { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1497,190 +1427,183 @@ pub mod schedule { 'a, ::buffa_types::google::protobuf::__buffa::view::TimestampView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> RRuleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `dtstart` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_dtstart(&self) -> bool { + self.dtstart.is_set() + } + /**Whether required field `rrule` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_rrule(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `timezone` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_timezone(&self) -> bool { + self.timezone.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for RRuleView<'a> { + type Owned = super::super::super::schedule::RRule; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.dtstart.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.dtstart = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.rrule = ::buffa::types::borrow_str(&mut cur)?; - } - 3u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.timezone.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.timezone = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::super::google::r#type::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 4u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.dtstart.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.rdate - .push( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( + None => { + view.dtstart = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - 5u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.rrule = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.timezone.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.exdate - .push( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( + None => { + view.timezone = ::buffa::MessageFieldView::set( + ::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + } } } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.rdate + .push( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.exdate + .push( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } - } - impl<'a> ::buffa::MessageView<'a> for RRuleView<'a> { - type Owned = super::super::super::schedule::RRule; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::super::schedule::RRule { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::RRule { + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::RRule { + ::core::result::Result::Ok(super::super::super::schedule::RRule { dtstart: match self.dtstart.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -1689,7 +1612,7 @@ pub mod schedule { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::super::google::r#type::TimeZone, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -1697,14 +1620,14 @@ pub mod schedule { .rdate .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, exdate: self .exdate .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for RRuleView<'a> { @@ -1757,45 +1680,36 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.dtstart.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.dtstart.write_to(__cache, buf); } - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.rrule, buf); + ::buffa::types::put_string_field(2u32, &self.rrule, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } for v in &self.rdate { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } for v in &self.exdate { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } } @@ -1846,24 +1760,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.Schedule.RRule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.RRule"; } - impl<'v> ::buffa::DefaultViewInstance for RRuleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for RRuleView<'static> { - type Reborrowed<'b> = RRuleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(RRuleView); + ::buffa::impl_view_reborrow!(RRuleView); /** Self-contained, `'static` owned view of a `RRule` message. Wraps [`::buffa::OwnedView`]`<`[`RRuleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1922,8 +1820,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::RRule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.rs index e3c4c6009..96a4b28e1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule.rs @@ -26,12 +26,7 @@ impl Schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule"; } -impl ::buffa::DefaultInstance for Schedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Schedule); impl ::buffa::MessageName for Schedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Schedule"; @@ -97,39 +92,35 @@ impl ::buffa::Message for Schedule { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::schedule::Kind::At(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Every(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Cron(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Rrule(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -139,7 +130,7 @@ impl ::buffa::Message for Schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -147,25 +138,18 @@ impl ::buffa::Message for Schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::At(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::At( ::buffa::alloc::boxed::Box::new(val), @@ -174,25 +158,18 @@ impl ::buffa::Message for Schedule { } } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Every(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Every( ::buffa::alloc::boxed::Box::new(val), @@ -201,25 +178,18 @@ impl ::buffa::Message for Schedule { } } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Cron(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Cron( ::buffa::alloc::boxed::Box::new(val), @@ -228,25 +198,18 @@ impl ::buffa::Message for Schedule { } } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Rrule(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Rrule( ::buffa::alloc::boxed::Box::new(val), @@ -255,7 +218,7 @@ impl ::buffa::Message for Schedule { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -436,12 +399,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.At"; } - impl ::buffa::DefaultInstance for At { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(At); impl ::buffa::MessageName for At { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Schedule.At"; @@ -477,12 +435,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.at.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.at.write_to(__cache, buf); } } @@ -490,7 +447,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -498,21 +455,18 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.at.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -561,12 +515,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.Every"; } - impl ::buffa::DefaultInstance for Every { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Every); impl ::buffa::MessageName for Every { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Schedule.Every"; @@ -602,12 +551,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.every.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.every.write_to(__cache, buf); } } @@ -615,7 +563,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -623,21 +571,18 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.every.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -694,12 +639,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.Cron"; } - impl ::buffa::DefaultInstance for Cron { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Cron); impl ::buffa::MessageName for Cron { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Schedule.Cron"; @@ -735,19 +675,13 @@ pub mod schedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.expr, buf); + ::buffa::types::put_string_field(1u32, &self.expr, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } } @@ -755,7 +689,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -763,31 +697,25 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.expr, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.timezone.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -865,12 +793,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.Schedule.RRule"; } - impl ::buffa::DefaultInstance for RRule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(RRule); impl ::buffa::MessageName for RRule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "Schedule.RRule"; @@ -931,45 +854,36 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.dtstart.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.dtstart.write_to(__cache, buf); } - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.rrule, buf); + ::buffa::types::put_string_field(2u32, &self.rrule, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } for v in &self.rdate { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } for v in &self.exdate { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } } @@ -977,7 +891,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -985,69 +899,54 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.dtstart.get_or_insert_default(), buf, - depth, + ctx, )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.rrule, buf)?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.timezone.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.rdate.push(elem); } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.exdate.push(elem); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.__view.rs index ddc594851..cad904ab1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.__view.rs @@ -54,245 +54,245 @@ pub struct ScheduleProjectionView<'a> { /// /// Field 8: `message` pub message: ::buffa::MessageFieldView>, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleProjectionView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `status` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_status(&self) -> bool { + self.status.is_set() + } + /**Whether required field `schedule` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule(&self) -> bool { + self.schedule.is_set() + } + /**Whether required field `delivery` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_delivery(&self) -> bool { + self.delivery.is_set() + } + /**Whether required field `message` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_message(&self) -> bool { + self.message.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { + type Owned = super::super::ScheduleProjection; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.status.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.status = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleStatusView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.status.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); + None => { + view.status = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } - view.completed = Some(::buffa::types::decode_bool(&mut cur)?); } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.completed = Some(::buffa::types::decode_bool(&mut cur)?); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.next_occurrence_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.next_occurrence_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.next_occurrence_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.next_occurrence_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.last_occurrence_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.last_occurrence_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.last_occurrence_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.last_occurrence_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 6u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.schedule.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.schedule.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.schedule = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.schedule = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 7u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.delivery.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.delivery.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.delivery = ::buffa::MessageFieldView::set( - super::super::__buffa::view::DeliveryView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.delivery = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 8u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 8u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 8u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.message.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.message.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.message = ::buffa::MessageFieldView::set( - super::super::__buffa::view::MessageView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.message = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { - type Owned = super::super::ScheduleProjection; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + ::core::result::Result::Ok(cur) } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::ScheduleProjection { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleProjection { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleProjection { + ::core::result::Result::Ok(super::super::ScheduleProjection { schedule_id: self.schedule_id.to_string(), status: match self.status.as_option() { Some(v) => { ::buffa::MessageField::< super::super::ScheduleStatus, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -301,7 +301,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -309,7 +309,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -317,7 +317,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Schedule, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -325,7 +325,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Delivery, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -333,12 +333,12 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleProjectionView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Message, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleProjectionView<'a> { @@ -409,66 +409,32 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleProjectionView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if self.status.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.status.write_to(__cache, buf); } if let Some(v) = self.completed { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_bool(v, buf); + ::buffa::types::put_bool_field(3u32, v, buf); } if self.next_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.next_occurrence_at.write_to(__cache, buf); } if self.last_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.last_occurrence_at.write_to(__cache, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 6u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(6u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 7u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(7u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 8u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(8u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -542,24 +508,8 @@ impl<'a> ::buffa::MessageName for ScheduleProjectionView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.ScheduleProjection"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleProjection"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleProjectionView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleProjectionView<'static> { - type Reborrowed<'b> = ScheduleProjectionView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleProjectionView); +::buffa::impl_view_reborrow!(ScheduleProjectionView); /** Self-contained, `'static` owned view of a `ScheduleProjection` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleProjectionView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -622,8 +572,14 @@ impl ScheduleProjectionOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleProjection { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.rs index 9802a7b29..676b10edb 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_projection.rs @@ -104,12 +104,7 @@ impl ScheduleProjection { self } } -impl ::buffa::DefaultInstance for ScheduleProjection { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleProjection); impl ::buffa::MessageName for ScheduleProjection { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "ScheduleProjection"; @@ -188,66 +183,32 @@ impl ::buffa::Message for ScheduleProjection { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if self.status.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.status.write_to(__cache, buf); } if let Some(v) = self.completed { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_bool(v, buf); + ::buffa::types::put_bool_field(3u32, v, buf); } if self.next_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.next_occurrence_at.write_to(__cache, buf); } if self.last_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.last_occurrence_at.write_to(__cache, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 6u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(6u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 7u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(7u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 8u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(8u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -255,7 +216,7 @@ impl ::buffa::Message for ScheduleProjection { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -263,113 +224,89 @@ impl ::buffa::Message for ScheduleProjection { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.status.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.completed = ::core::option::Option::Some( ::buffa::types::decode_bool(buf)?, ); } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.next_occurrence_at.get_or_insert_default(), buf, - depth, + ctx, )?; } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.last_occurrence_at.get_or_insert_default(), buf, - depth, + ctx, )?; } 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.schedule.get_or_insert_default(), buf, - depth, + ctx, )?; } 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.delivery.get_or_insert_default(), buf, - depth, + ctx, )?; } 8u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 8u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.message.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.__view.rs index e3a21acdf..deaec4164 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.__view.rs @@ -12,163 +12,144 @@ pub struct ScheduleStatusView<'a> { super::super::__buffa::view::oneof::schedule_status::Kind<'a>, >, } -impl<'a> ScheduleStatusView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleStatusView<'a> { + type Owned = super::super::ScheduleStatus; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule_status::ScheduledView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_status::Kind::Paused( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule_status::Kind::Paused( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule_status::Kind::Paused( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule_status::PausedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleStatusView<'a> { - type Owned = super::super::ScheduleStatus; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::ScheduleStatus { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleStatus { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleStatus { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( - v, - ) => { - super::super::__buffa::oneof::schedule_status::Kind::Scheduled( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_status::Kind::Paused( - v, - ) => { - super::super::__buffa::oneof::schedule_status::Kind::Paused( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::ScheduleStatus { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( + v, + ) => { + super::super::__buffa::oneof::schedule_status::Kind::Scheduled( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_status::Kind::Paused( + v, + ) => { + super::super::__buffa::oneof::schedule_status::Kind::Paused( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleStatusView<'a> { @@ -214,21 +195,19 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleStatusView<'a> { super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_status::Kind::Paused(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -274,24 +253,8 @@ impl<'a> ::buffa::MessageName for ScheduleStatusView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.ScheduleStatus"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleStatus"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleStatusView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleStatusView<'static> { - type Reborrowed<'b> = ScheduleStatusView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleStatusView); +::buffa::impl_view_reborrow!(ScheduleStatusView); /** Self-contained, `'static` owned view of a `ScheduleStatus` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleStatusView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -352,8 +315,14 @@ impl ScheduleStatusOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleStatus { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -415,78 +384,63 @@ pub mod schedule_status { #[doc(hidden)] pub __buffa_phantom: ::core::marker::PhantomData<&'a ()>, } - impl<'a> ScheduledView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) - } - } impl<'a> ::buffa::MessageView<'a> for ScheduledView<'a> { type Owned = super::super::super::schedule_status::Scheduled; fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule_status::Scheduled { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule_status::Scheduled, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule_status::Scheduled { + ) -> ::core::result::Result< + super::super::super::schedule_status::Scheduled, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule_status::Scheduled { + ::core::result::Result::Ok(super::super::super::schedule_status::Scheduled { ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduledView<'a> { @@ -534,24 +488,8 @@ pub mod schedule_status { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.ScheduleStatus.Scheduled"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleStatus.Scheduled"; } - impl<'v> ::buffa::DefaultViewInstance for ScheduledView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for ScheduledView<'static> { - type Reborrowed<'b> = ScheduledView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(ScheduledView); + ::buffa::impl_view_reborrow!(ScheduledView); /** Self-contained, `'static` owned view of a `Scheduled` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduledView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -610,10 +548,17 @@ pub mod schedule_status { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::schedule_status::Scheduled { + ) -> ::core::result::Result< + super::super::super::schedule_status::Scheduled, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -663,78 +608,63 @@ pub mod schedule_status { #[doc(hidden)] pub __buffa_phantom: ::core::marker::PhantomData<&'a ()>, } - impl<'a> PausedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) - } - } impl<'a> ::buffa::MessageView<'a> for PausedView<'a> { type Owned = super::super::super::schedule_status::Paused; fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::super::schedule_status::Paused { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule_status::Paused, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule_status::Paused { + ) -> ::core::result::Result< + super::super::super::schedule_status::Paused, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule_status::Paused { + ::core::result::Result::Ok(super::super::super::schedule_status::Paused { ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for PausedView<'a> { @@ -782,24 +712,8 @@ pub mod schedule_status { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.projections.v1.ScheduleStatus.Paused"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleStatus.Paused"; } - impl<'v> ::buffa::DefaultViewInstance for PausedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for PausedView<'static> { - type Reborrowed<'b> = PausedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(PausedView); + ::buffa::impl_view_reborrow!(PausedView); /** Self-contained, `'static` owned view of a `Paused` message. Wraps [`::buffa::OwnedView`]`<`[`PausedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -858,8 +772,17 @@ pub mod schedule_status { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule_status::Paused { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule_status::Paused, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.rs index 4b931a3e6..b92c016d6 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.projections.v1.schedule_status.rs @@ -25,12 +25,7 @@ impl ScheduleStatus { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleStatus"; } -impl ::buffa::DefaultInstance for ScheduleStatus { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleStatus); impl ::buffa::MessageName for ScheduleStatus { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "ScheduleStatus"; @@ -80,21 +75,19 @@ impl ::buffa::Message for ScheduleStatus { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::schedule_status::Kind::Scheduled(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_status::Kind::Paused(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -104,7 +97,7 @@ impl ::buffa::Message for ScheduleStatus { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -112,25 +105,18 @@ impl ::buffa::Message for ScheduleStatus { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Scheduled(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Scheduled( ::buffa::alloc::boxed::Box::new(val), @@ -139,25 +125,18 @@ impl ::buffa::Message for ScheduleStatus { } } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Paused(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Paused( ::buffa::alloc::boxed::Box::new(val), @@ -166,7 +145,7 @@ impl ::buffa::Message for ScheduleStatus { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -296,12 +275,7 @@ pub mod schedule_status { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleStatus.Scheduled"; } - impl ::buffa::DefaultInstance for Scheduled { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Scheduled); impl ::buffa::MessageName for Scheduled { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "ScheduleStatus.Scheduled"; @@ -333,7 +307,7 @@ pub mod schedule_status { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -341,7 +315,7 @@ pub mod schedule_status { use ::buffa::Enumeration as _; match tag.field_number() { _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -385,12 +359,7 @@ pub mod schedule_status { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.projections.v1.ScheduleStatus.Paused"; } - impl ::buffa::DefaultInstance for Paused { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Paused); impl ::buffa::MessageName for Paused { const PACKAGE: &'static str = "trogonai.scheduler.schedules.projections.v1"; const NAME: &'static str = "ScheduleStatus.Paused"; @@ -422,7 +391,7 @@ pub mod schedule_status { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -430,7 +399,7 @@ pub mod schedule_status { use ::buffa::Enumeration as _; match tag.field_number() { _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.__view.rs index 73de7fded..db4a825fb 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.__view.rs @@ -29,186 +29,147 @@ pub struct StateView<'a> { /// Field 6: `completed` pub completed: ::core::option::Option, } -impl<'a> StateView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for StateView<'a> { + type Owned = super::super::State; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.state = Some( - ::buffa::EnumValue::from(::buffa::types::decode_int32(&mut cur)?), - ); - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.last_occurrence_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.last_occurrence_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.state = Some( + ::buffa::EnumValue::from(::buffa::types::decode_int32(&mut cur)?), + ); + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.last_occurrence_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); + None => { + view.last_occurrence_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } - view.last_occurrence_sequence = Some( - ::buffa::types::decode_uint64(&mut cur)?, - ); } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.last_occurrence_sequence = Some( + ::buffa::types::decode_uint64(&mut cur)?, + ); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.schedule.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.schedule.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.schedule = ::buffa::MessageFieldView::set( - super::super::super::super::v1::__buffa::view::ScheduleView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.schedule = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.pending_occurrence_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.pending_occurrence_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.pending_occurrence_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - } - 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); + None => { + view.pending_occurrence_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } - view.completed = Some(::buffa::types::decode_bool(&mut cur)?); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; } } + 6u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.completed = Some(::buffa::types::decode_bool(&mut cur)?); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for StateView<'a> { - type Owned = super::super::State; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + ::core::result::Result::Ok(cur) } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::State { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::State { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::State { + ::core::result::Result::Ok(super::super::State { state: self.state, last_occurrence_at: match self.last_occurrence_at.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -217,7 +178,7 @@ impl<'a> ::buffa::MessageView<'a> for StateView<'a> { Some(v) => { ::buffa::MessageField::< super::super::super::super::v1::Schedule, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -225,13 +186,13 @@ impl<'a> ::buffa::MessageView<'a> for StateView<'a> { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, completed: self.completed, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for StateView<'a> { @@ -284,46 +245,25 @@ impl<'a> ::buffa::ViewEncode<'a> for StateView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if let Some(ref v) = self.state { - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(v.to_i32(), buf); + ::buffa::types::put_int32_field(1u32, v.to_i32(), buf); } if self.last_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.last_occurrence_at.write_to(__cache, buf); } if let Some(v) = self.last_occurrence_sequence { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(3u32, v, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.pending_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.pending_occurrence_at.write_to(__cache, buf); } if let Some(v) = self.completed { - ::buffa::encoding::Tag::new(6u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_bool(v, buf); + ::buffa::types::put_bool_field(6u32, v, buf); } } } @@ -357,16 +297,11 @@ impl<'__a> ::serde::Serialize for StateView<'__a> { } } if let ::core::option::Option::Some(__v) = self.last_occurrence_sequence { - struct _W(u64); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::uint64::serialize(&self.0, __s) - } - } - __map.serialize_entry("lastOccurrenceSequence", &_W(__v))?; + __map + .serialize_entry( + "lastOccurrenceSequence", + &::buffa::json_helpers::ProtoJson(&__v), + )?; } { if let ::core::option::Option::Some(__v) = self.schedule.as_option() { @@ -393,24 +328,8 @@ impl<'a> ::buffa::MessageName for StateView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.state.v1.State"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.state.v1.State"; } -impl<'v> ::buffa::DefaultViewInstance for StateView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for StateView<'static> { - type Reborrowed<'b> = StateView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(StateView); +::buffa::impl_view_reborrow!(StateView); /** Self-contained, `'static` owned view of a `State` message. Wraps [`::buffa::OwnedView`]`<`[`StateView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -465,8 +384,14 @@ impl StateOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::State { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.rs index 771364229..b10a2f9bb 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.state.v1.state.rs @@ -273,12 +273,7 @@ impl State { self } } -impl ::buffa::DefaultInstance for State { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(State); impl ::buffa::MessageName for State { const PACKAGE: &'static str = "trogonai.scheduler.schedules.state.v1"; const NAME: &'static str = "State"; @@ -339,53 +334,32 @@ impl ::buffa::Message for State { #[allow(unused_imports)] use ::buffa::Enumeration as _; if let Some(ref v) = self.state { - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_int32(v.to_i32(), buf); + ::buffa::types::put_int32_field(1u32, v.to_i32(), buf); } if self.last_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.last_occurrence_at.write_to(__cache, buf); } if let Some(v) = self.last_occurrence_sequence { - ::buffa::encoding::Tag::new(3u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(3u32, v, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.pending_occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.pending_occurrence_at.write_to(__cache, buf); } if let Some(v) = self.completed { - ::buffa::encoding::Tag::new(6u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_bool(v, buf); + ::buffa::types::put_bool_field(6u32, v, buf); } } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -393,85 +367,67 @@ impl ::buffa::Message for State { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.state = ::core::option::Option::Some( ::buffa::EnumValue::from(::buffa::types::decode_int32(buf)?), ); } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.last_occurrence_at.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.last_occurrence_sequence = ::core::option::Option::Some( ::buffa::types::decode_uint64(buf)?, ); } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.schedule.get_or_insert_default(), buf, - depth, + ctx, )?; } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.pending_occurrence_at.get_or_insert_default(), buf, - depth, + ctx, )?; } 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.completed = ::core::option::Option::Some( ::buffa::types::decode_bool(buf)?, ); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.__view.rs index 8e7c77503..c323d9c78 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.__view.rs @@ -20,187 +20,196 @@ pub struct CreateScheduleView<'a> { >, /// Field 5: `message` pub message: ::buffa::MessageFieldView>, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> CreateScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `status` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_status(&self) -> bool { + self.status.is_set() + } + /**Whether required field `schedule` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule(&self) -> bool { + self.schedule.is_set() + } + /**Whether required field `delivery` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_delivery(&self) -> bool { + self.delivery.is_set() + } + /**Whether required field `message` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_message(&self) -> bool { + self.message.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for CreateScheduleView<'a> { + type Owned = super::super::CreateSchedule; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.status.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.status.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.status = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleStatusView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.status = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.schedule.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.schedule.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.schedule = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.schedule = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.delivery.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.delivery.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.delivery = ::buffa::MessageFieldView::set( - super::super::__buffa::view::DeliveryView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.delivery = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.message.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.message.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.message = ::buffa::MessageFieldView::set( - super::super::__buffa::view::MessageView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.message = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for CreateScheduleView<'a> { - type Owned = super::super::CreateSchedule; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::CreateSchedule { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::CreateSchedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::CreateSchedule { + ::core::result::Result::Ok(super::super::CreateSchedule { schedule_id: self.schedule_id.to_string(), status: match self.status.as_option() { Some(v) => { ::buffa::MessageField::< super::super::ScheduleStatus, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -208,7 +217,7 @@ impl<'a> ::buffa::MessageView<'a> for CreateScheduleView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Schedule, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -216,7 +225,7 @@ impl<'a> ::buffa::MessageView<'a> for CreateScheduleView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Delivery, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -224,12 +233,12 @@ impl<'a> ::buffa::MessageView<'a> for CreateScheduleView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Message, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for CreateScheduleView<'a> { @@ -281,43 +290,21 @@ impl<'a> ::buffa::ViewEncode<'a> for CreateScheduleView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if self.status.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.status.write_to(__cache, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -372,24 +359,8 @@ impl<'a> ::buffa::MessageName for CreateScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.CreateSchedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.CreateSchedule"; } -impl<'v> ::buffa::DefaultViewInstance for CreateScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for CreateScheduleView<'static> { - type Reborrowed<'b> = CreateScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(CreateScheduleView); +::buffa::impl_view_reborrow!(CreateScheduleView); /** Self-contained, `'static` owned view of a `CreateSchedule` message. Wraps [`::buffa::OwnedView`]`<`[`CreateScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -450,8 +421,14 @@ impl CreateScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::CreateSchedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.rs index 1172683f3..487ceca16 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.create_schedule.rs @@ -44,12 +44,7 @@ impl CreateSchedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.CreateSchedule"; } -impl ::buffa::DefaultInstance for CreateSchedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(CreateSchedule); impl ::buffa::MessageName for CreateSchedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "CreateSchedule"; @@ -109,43 +104,21 @@ impl ::buffa::Message for CreateSchedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if self.status.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.status.write_to(__cache, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -153,7 +126,7 @@ impl ::buffa::Message for CreateSchedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -161,73 +134,58 @@ impl ::buffa::Message for CreateSchedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.status.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.schedule.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.delivery.get_or_insert_default(), buf, - depth, + ctx, )?; } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.message.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.__view.rs index 68fd32832..db965a059 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.__view.rs @@ -8,122 +8,104 @@ pub struct DeliveryView<'a> { super::super::__buffa::view::oneof::delivery::Kind<'a>, >, } -impl<'a> DeliveryView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for DeliveryView<'a> { + type Owned = super::super::Delivery; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::delivery::NatsMessageView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for DeliveryView<'a> { - type Owned = super::super::Delivery; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Delivery { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Delivery { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Delivery { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( - v, - ) => { - super::super::__buffa::oneof::delivery::Kind::NatsMessage( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::Delivery { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::delivery::Kind::NatsMessage( + v, + ) => { + super::super::__buffa::oneof::delivery::Kind::NatsMessage( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for DeliveryView<'a> { @@ -157,12 +139,11 @@ impl<'a> ::buffa::ViewEncode<'a> for DeliveryView<'a> { if let ::core::option::Option::Some(ref v) = self.kind { match v { super::super::__buffa::view::oneof::delivery::Kind::NatsMessage(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -203,24 +184,8 @@ impl<'a> ::buffa::MessageName for DeliveryView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Delivery"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery"; } -impl<'v> ::buffa::DefaultViewInstance for DeliveryView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for DeliveryView<'static> { - type Reborrowed<'b> = DeliveryView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(DeliveryView); +::buffa::impl_view_reborrow!(DeliveryView); /** Self-contained, `'static` owned view of a `Delivery` message. Wraps [`::buffa::OwnedView`]`<`[`DeliveryView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -277,8 +242,14 @@ impl DeliveryOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Delivery { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -353,147 +324,138 @@ pub mod delivery { pub source: ::buffa::MessageFieldView< super::super::super::__buffa::view::delivery::nats_message::SourceView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> NatsMessageView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `subject` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_subject(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + } + impl<'a> ::buffa::MessageView<'a> for NatsMessageView<'a> { + type Owned = super::super::super::delivery::NatsMessage; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.subject = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.subject = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.ttl.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.ttl.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.ttl = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.ttl = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 3u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.source.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.source.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.source = ::buffa::MessageFieldView::set( - super::super::super::__buffa::view::delivery::nats_message::SourceView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.source = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for NatsMessageView<'a> { - type Owned = super::super::super::delivery::NatsMessage; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::delivery::NatsMessage { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::delivery::NatsMessage { + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::delivery::NatsMessage { + ::core::result::Result::Ok(super::super::super::delivery::NatsMessage { subject: self.subject.to_string(), ttl: match self.ttl.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Duration, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -501,12 +463,12 @@ pub mod delivery { Some(v) => { ::buffa::MessageField::< super::super::super::delivery::nats_message::Source, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for NatsMessageView<'a> { @@ -542,28 +504,21 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); if self.ttl.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.ttl.write_to(__cache, buf); } if self.source.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.source.write_to(__cache, buf); } } @@ -608,24 +563,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Delivery.NatsMessage"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery.NatsMessage"; } - impl<'v> ::buffa::DefaultViewInstance for NatsMessageView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for NatsMessageView<'static> { - type Reborrowed<'b> = NatsMessageView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(NatsMessageView); + ::buffa::impl_view_reborrow!(NatsMessageView); /** Self-contained, `'static` owned view of a `NatsMessage` message. Wraps [`::buffa::OwnedView`]`<`[`NatsMessageView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -686,8 +625,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::delivery::NatsMessage { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::delivery::NatsMessage, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -771,128 +719,114 @@ pub mod delivery { >, >, } - impl<'a> SourceView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + impl<'a> ::buffa::MessageView<'a> for SourceView<'a> { + type Owned = super::super::super::super::delivery::nats_message::Source; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new( + ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT, + ); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ::buffa::alloc::boxed::Box::new( - super::super::super::super::__buffa::view::delivery::nats_message::LatestFromSubjectView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for SourceView<'a> { - type Owned = super::super::super::super::delivery::nats_message::Source; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::super::delivery::nats_message::Source { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - v, - ) => { - super::super::super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::super::super::delivery::nats_message::Source { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + v, + ) => { + super::super::super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for SourceView<'a> { @@ -930,13 +864,9 @@ pub mod delivery { super::super::super::super::__buffa::view::oneof::delivery::nats_message::source::Kind::LatestFromSubject( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint( - __cache.consume_next() as u64, + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), buf, ); x.write_to(__cache, buf); @@ -981,24 +911,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Delivery.NatsMessage.Source"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery.NatsMessage.Source"; } - impl<'v> ::buffa::DefaultViewInstance for SourceView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for SourceView<'static> { - type Reborrowed<'b> = SourceView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(SourceView); + ::buffa::impl_view_reborrow!(SourceView); /** Self-contained, `'static` owned view of a `Source` message. Wraps [`::buffa::OwnedView`]`<`[`SourceView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1059,10 +973,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::Source { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::Source, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1125,62 +1046,17 @@ pub mod delivery { /// /// Field 1: `subject` pub subject: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> LatestFromSubjectView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.subject = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `subject` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_subject(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for LatestFromSubjectView<'a> { @@ -1188,31 +1064,69 @@ pub mod delivery { fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new( + ::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT, + ); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.subject = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::super::delivery::nats_message::LatestFromSubject { + ::core::result::Result::Ok(super::super::super::super::delivery::nats_message::LatestFromSubject { subject: self.subject.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for LatestFromSubjectView<'a> { @@ -1232,12 +1146,7 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); } } /// Serializes this view as protobuf JSON. @@ -1270,26 +1179,8 @@ pub mod delivery { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Delivery.NatsMessage.LatestFromSubject"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery.NatsMessage.LatestFromSubject"; } - impl<'v> ::buffa::DefaultViewInstance for LatestFromSubjectView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox< - LatestFromSubjectView<'static>, - > = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for LatestFromSubjectView<'static> { - type Reborrowed<'b> = LatestFromSubjectView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(LatestFromSubjectView); + ::buffa::impl_view_reborrow!(LatestFromSubjectView); /** Self-contained, `'static` owned view of a `LatestFromSubject` message. Wraps [`::buffa::OwnedView`]`<`[`LatestFromSubjectView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1352,10 +1243,17 @@ pub mod delivery { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::super::delivery::nats_message::LatestFromSubject { + ) -> ::core::result::Result< + super::super::super::super::delivery::nats_message::LatestFromSubject, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.rs index b9e50db36..f76d85898 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.delivery.rs @@ -21,12 +21,7 @@ impl Delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery"; } -impl ::buffa::DefaultInstance for Delivery { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Delivery); impl ::buffa::MessageName for Delivery { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Delivery"; @@ -68,12 +63,11 @@ impl ::buffa::Message for Delivery { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::delivery::Kind::NatsMessage(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -83,7 +77,7 @@ impl ::buffa::Message for Delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -91,25 +85,18 @@ impl ::buffa::Message for Delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::delivery::Kind::NatsMessage(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::delivery::Kind::NatsMessage( ::buffa::alloc::boxed::Box::new(val), @@ -118,7 +105,7 @@ impl ::buffa::Message for Delivery { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -250,12 +237,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery.NatsMessage"; } - impl ::buffa::DefaultInstance for NatsMessage { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(NatsMessage); impl ::buffa::MessageName for NatsMessage { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Delivery.NatsMessage"; @@ -299,28 +281,21 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); if self.ttl.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.ttl.write_to(__cache, buf); } if self.source.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.source.write_to(__cache, buf); } } @@ -328,7 +303,7 @@ pub mod delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -336,45 +311,36 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.subject, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.ttl.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.source.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -429,12 +395,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery.NatsMessage.Source"; } - impl ::buffa::DefaultInstance for Source { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Source); impl ::buffa::MessageName for Source { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Delivery.NatsMessage.Source"; @@ -480,13 +441,9 @@ pub mod delivery { super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint( - __cache.consume_next() as u64, + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), buf, ); x.write_to(__cache, buf); @@ -498,7 +455,7 @@ pub mod delivery { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -506,15 +463,10 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( ref mut existing, @@ -524,14 +476,14 @@ pub mod delivery { ::buffa::Message::merge_length_delimited( &mut **existing, buf, - depth, + ctx, )?; } else { let mut val = ::core::default::Default::default(); ::buffa::Message::merge_length_delimited( &mut val, buf, - depth, + ctx, )?; self.kind = ::core::option::Option::Some( super::super::__buffa::oneof::delivery::nats_message::source::Kind::LatestFromSubject( @@ -541,7 +493,7 @@ pub mod delivery { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -667,12 +619,7 @@ pub mod delivery { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Delivery.NatsMessage.LatestFromSubject"; } - impl ::buffa::DefaultInstance for LatestFromSubject { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(LatestFromSubject); impl ::buffa::MessageName for LatestFromSubject { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Delivery.NatsMessage.LatestFromSubject"; @@ -700,18 +647,13 @@ pub mod delivery { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.subject, buf); + ::buffa::types::put_string_field(1u32, &self.subject, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -719,19 +661,14 @@ pub mod delivery { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.subject, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.__view.rs index 79237318f..dede0cf7d 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.__view.rs @@ -8,368 +8,344 @@ pub struct ScheduleEventView<'a> { super::super::__buffa::view::oneof::schedule_event::Event<'a>, >, } -impl<'a> ScheduleEventView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleEventView<'a> { + type Owned = super::super::ScheduleEvent; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCreated( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCreated( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCreated( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::ScheduleCreatedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::SchedulePaused( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::SchedulePaused( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::SchedulePaused( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::SchedulePausedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleResumed( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::ScheduleResumed( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleResumed( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::ScheduleResumedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleRemoved( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::ScheduleRemoved( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleRemoved( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::ScheduleRemovedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::ScheduleOccurrenceRecordedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 6u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::ScheduleOccurrenceScheduledView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 7u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCompleted( + ref mut existing, + ), + ) = view.event + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.event = Some( super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCompleted( - ref mut existing, - ), - ) = view.event - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.event = Some( - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCompleted( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::ScheduleCompletedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleEventView<'a> { - type Owned = super::super::ScheduleEvent; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + ::core::result::Result::Ok(cur) } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::ScheduleEvent { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleEvent { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleEvent { - event: self - .event - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCreated( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::ScheduleCreated( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_event::Event::SchedulePaused( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::SchedulePaused( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleResumed( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::ScheduleResumed( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleRemoved( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::ScheduleRemoved( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCompleted( - v, - ) => { - super::super::__buffa::oneof::schedule_event::Event::ScheduleCompleted( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::ScheduleEvent { + event: match self.event.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCreated( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::ScheduleCreated( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_event::Event::SchedulePaused( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::SchedulePaused( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleResumed( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::ScheduleResumed( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleRemoved( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::ScheduleRemoved( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCompleted( + v, + ) => { + super::super::__buffa::oneof::schedule_event::Event::ScheduleCompleted( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleEventView<'a> { @@ -467,78 +443,71 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleEventView<'a> { super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCreated( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_event::Event::SchedulePaused( x, ) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_event::Event::ScheduleResumed( x, ) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_event::Event::ScheduleRemoved( x, ) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( x, ) => { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( x, ) => { - ::buffa::encoding::Tag::new( - 6u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 6u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_event::Event::ScheduleCompleted( x, ) => { - ::buffa::encoding::Tag::new( - 7u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 7u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -611,24 +580,8 @@ impl<'a> ::buffa::MessageName for ScheduleEventView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleEvent"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleEvent"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleEventView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleEventView<'static> { - type Reborrowed<'b> = ScheduleEventView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleEventView); +::buffa::impl_view_reborrow!(ScheduleEventView); /** Self-contained, `'static` owned view of a `ScheduleEvent` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleEventView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -687,8 +640,14 @@ impl ScheduleEventOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleEvent { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.rs index ae12571db..c8683079d 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.events.rs @@ -21,12 +21,7 @@ impl ScheduleEvent { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleEvent"; } -impl ::buffa::DefaultInstance for ScheduleEvent { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleEvent); impl ::buffa::MessageName for ScheduleEvent { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleEvent"; @@ -118,68 +113,61 @@ impl ::buffa::Message for ScheduleEvent { if let ::core::option::Option::Some(ref v) = self.event { match v { __buffa::oneof::schedule_event::Event::ScheduleCreated(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_event::Event::SchedulePaused(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_event::Event::ScheduleResumed(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_event::Event::ScheduleRemoved(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_event::Event::ScheduleOccurrenceRecorded(x) => { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( x, ) => { - ::buffa::encoding::Tag::new( - 6u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 6u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_event::Event::ScheduleCompleted(x) => { - ::buffa::encoding::Tag::new( - 7u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 7u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -189,7 +177,7 @@ impl ::buffa::Message for ScheduleEvent { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -197,27 +185,20 @@ impl ::buffa::Message for ScheduleEvent { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleCreated( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleCreated( ::buffa::alloc::boxed::Box::new(val), @@ -226,27 +207,20 @@ impl ::buffa::Message for ScheduleEvent { } } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::SchedulePaused( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::SchedulePaused( ::buffa::alloc::boxed::Box::new(val), @@ -255,27 +229,20 @@ impl ::buffa::Message for ScheduleEvent { } } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleResumed( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleResumed( ::buffa::alloc::boxed::Box::new(val), @@ -284,27 +251,20 @@ impl ::buffa::Message for ScheduleEvent { } } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleRemoved( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleRemoved( ::buffa::alloc::boxed::Box::new(val), @@ -313,27 +273,20 @@ impl ::buffa::Message for ScheduleEvent { } } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleOccurrenceRecorded( ::buffa::alloc::boxed::Box::new(val), @@ -342,27 +295,20 @@ impl ::buffa::Message for ScheduleEvent { } } 6u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 6u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleOccurrenceScheduled( ::buffa::alloc::boxed::Box::new(val), @@ -371,27 +317,20 @@ impl ::buffa::Message for ScheduleEvent { } } 7u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 7u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleCompleted( ref mut existing, ), ) = self.event { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.event = ::core::option::Option::Some( __buffa::oneof::schedule_event::Event::ScheduleCompleted( ::buffa::alloc::boxed::Box::new(val), @@ -400,7 +339,7 @@ impl ::buffa::Message for ScheduleEvent { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.__view.rs index 9fd377b6a..329348a69 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.__view.rs @@ -18,122 +18,103 @@ pub struct MessageView<'a> { pub headers: ::buffa::RepeatedView<'a, super::super::__buffa::view::HeaderView<'a>>, } impl<'a> MessageView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `content` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_content(&self) -> bool { + self.content.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { + type Owned = super::super::Message; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.content.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.content = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::trogon::content::v1alpha1::__buffa::view::ContentView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.content.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.headers - .push( - super::super::__buffa::view::HeaderView::_decode_depth( + None => { + view.content = ::buffa::MessageFieldView::set( + ::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + } } } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.headers + .push( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { - type Owned = super::super::Message; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Message { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Message { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Message { + ::core::result::Result::Ok(super::super::Message { content: match self.content.as_option() { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::trogon::content::v1alpha1::Content, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -141,9 +122,9 @@ impl<'a> ::buffa::MessageView<'a> for MessageView<'a> { .headers .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for MessageView<'a> { @@ -179,21 +160,11 @@ impl<'a> ::buffa::ViewEncode<'a> for MessageView<'a> { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.content.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(1u32, __cache.consume_next(), buf); self.content.write_to(__cache, buf); } for v in &self.headers { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); v.write_to(__cache, buf); } } @@ -233,24 +204,8 @@ impl<'a> ::buffa::MessageName for MessageView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Message"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Message"; } -impl<'v> ::buffa::DefaultViewInstance for MessageView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for MessageView<'static> { - type Reborrowed<'b> = MessageView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(MessageView); +::buffa::impl_view_reborrow!(MessageView); /** Self-contained, `'static` owned view of a `Message` message. Wraps [`::buffa::OwnedView`]`<`[`MessageView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -307,8 +262,14 @@ impl MessageOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Message { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -384,99 +345,94 @@ pub struct HeaderView<'a> { /// /// Field 2: `value` pub value: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> HeaderView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + /**Whether required field `name` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_name(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.name = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.value = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `value` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_value(&self) -> bool { + self.__buffa_required_seen_0 & 2u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for HeaderView<'a> { type Owned = super::super::Header; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.name = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.value = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 2u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Header { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Header { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Header { + ::core::result::Result::Ok(super::super::Header { name: self.name.to_string(), value: self.value.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for HeaderView<'a> { @@ -497,12 +453,8 @@ impl<'a> ::buffa::ViewEncode<'a> for HeaderView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.name, buf); - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.value, buf); + ::buffa::types::put_string_field(1u32, &self.name, buf); + ::buffa::types::put_string_field(2u32, &self.value, buf); } } /// Serializes this view as protobuf JSON. @@ -538,24 +490,8 @@ impl<'a> ::buffa::MessageName for HeaderView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Header"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Header"; } -impl<'v> ::buffa::DefaultViewInstance for HeaderView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for HeaderView<'static> { - type Reborrowed<'b> = HeaderView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(HeaderView); +::buffa::impl_view_reborrow!(HeaderView); /** Self-contained, `'static` owned view of a `Header` message. Wraps [`::buffa::OwnedView`]`<`[`HeaderView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -610,8 +546,14 @@ impl HeaderOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Header { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.rs index c3a475efa..d4fedcde1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.message.rs @@ -38,12 +38,7 @@ impl Message { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Message"; } -impl ::buffa::DefaultInstance for Message { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Message); impl ::buffa::MessageName for Message { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Message"; @@ -87,21 +82,11 @@ impl ::buffa::Message for Message { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.content.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(1u32, __cache.consume_next(), buf); self.content.write_to(__cache, buf); } for v in &self.headers { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); v.write_to(__cache, buf); } } @@ -109,7 +94,7 @@ impl ::buffa::Message for Message { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -117,33 +102,27 @@ impl ::buffa::Message for Message { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.content.get_or_insert_default(), buf, - depth, + ctx, )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.headers.push(elem); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -203,12 +182,7 @@ impl Header { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Header"; } -impl ::buffa::DefaultInstance for Header { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox
= ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Header); impl ::buffa::MessageName for Header { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Header"; @@ -237,18 +211,14 @@ impl ::buffa::Message for Header { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.name, buf); - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.value, buf); + ::buffa::types::put_string_field(1u32, &self.name, buf); + ::buffa::types::put_string_field(2u32, &self.value, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -256,27 +226,21 @@ impl ::buffa::Message for Header { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.name, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.value, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.__view.rs index 76d8213be..02c4346a1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.__view.rs @@ -5,88 +5,77 @@ pub struct PauseScheduleView<'a> { /// Field 1: `schedule_id` pub schedule_id: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> PauseScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for PauseScheduleView<'a> { type Owned = super::super::PauseSchedule; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::PauseSchedule { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::PauseSchedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::PauseSchedule { + ::core::result::Result::Ok(super::super::PauseSchedule { schedule_id: self.schedule_id.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for PauseScheduleView<'a> { @@ -106,9 +95,7 @@ impl<'a> ::buffa::ViewEncode<'a> for PauseScheduleView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } } /// Serializes this view as protobuf JSON. @@ -141,24 +128,8 @@ impl<'a> ::buffa::MessageName for PauseScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.PauseSchedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.PauseSchedule"; } -impl<'v> ::buffa::DefaultViewInstance for PauseScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for PauseScheduleView<'static> { - type Reborrowed<'b> = PauseScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(PauseScheduleView); +::buffa::impl_view_reborrow!(PauseScheduleView); /** Self-contained, `'static` owned view of a `PauseSchedule` message. Wraps [`::buffa::OwnedView`]`<`[`PauseScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -217,8 +188,14 @@ impl PauseScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::PauseSchedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.rs index 7f7428195..79699ccd1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.pause_schedule.rs @@ -25,12 +25,7 @@ impl PauseSchedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.PauseSchedule"; } -impl ::buffa::DefaultInstance for PauseSchedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(PauseSchedule); impl ::buffa::MessageName for PauseSchedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "PauseSchedule"; @@ -58,15 +53,13 @@ impl ::buffa::Message for PauseSchedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -74,17 +67,14 @@ impl ::buffa::Message for PauseSchedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.__view.rs index 8f54513fb..17dbe9dd1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.__view.rs @@ -5,88 +5,77 @@ pub struct RemoveScheduleView<'a> { /// Field 1: `schedule_id` pub schedule_id: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> RemoveScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for RemoveScheduleView<'a> { type Owned = super::super::RemoveSchedule; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::RemoveSchedule { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::RemoveSchedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::RemoveSchedule { + ::core::result::Result::Ok(super::super::RemoveSchedule { schedule_id: self.schedule_id.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for RemoveScheduleView<'a> { @@ -106,9 +95,7 @@ impl<'a> ::buffa::ViewEncode<'a> for RemoveScheduleView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } } /// Serializes this view as protobuf JSON. @@ -141,24 +128,8 @@ impl<'a> ::buffa::MessageName for RemoveScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.RemoveSchedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.RemoveSchedule"; } -impl<'v> ::buffa::DefaultViewInstance for RemoveScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for RemoveScheduleView<'static> { - type Reborrowed<'b> = RemoveScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(RemoveScheduleView); +::buffa::impl_view_reborrow!(RemoveScheduleView); /** Self-contained, `'static` owned view of a `RemoveSchedule` message. Wraps [`::buffa::OwnedView`]`<`[`RemoveScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -219,8 +190,14 @@ impl RemoveScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::RemoveSchedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.rs index 0d82abb39..6b7723ca1 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.remove_schedule.rs @@ -25,12 +25,7 @@ impl RemoveSchedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.RemoveSchedule"; } -impl ::buffa::DefaultInstance for RemoveSchedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(RemoveSchedule); impl ::buffa::MessageName for RemoveSchedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "RemoveSchedule"; @@ -58,15 +53,13 @@ impl ::buffa::Message for RemoveSchedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -74,17 +67,14 @@ impl ::buffa::Message for RemoveSchedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.__view.rs index cb0b6365a..d3b69c7b4 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.__view.rs @@ -5,88 +5,77 @@ pub struct ResumeScheduleView<'a> { /// Field 1: `schedule_id` pub schedule_id: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ResumeScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for ResumeScheduleView<'a> { type Owned = super::super::ResumeSchedule; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::ResumeSchedule { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ResumeSchedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ResumeSchedule { + ::core::result::Result::Ok(super::super::ResumeSchedule { schedule_id: self.schedule_id.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ResumeScheduleView<'a> { @@ -106,9 +95,7 @@ impl<'a> ::buffa::ViewEncode<'a> for ResumeScheduleView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } } /// Serializes this view as protobuf JSON. @@ -141,24 +128,8 @@ impl<'a> ::buffa::MessageName for ResumeScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ResumeSchedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ResumeSchedule"; } -impl<'v> ::buffa::DefaultViewInstance for ResumeScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ResumeScheduleView<'static> { - type Reborrowed<'b> = ResumeScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ResumeScheduleView); +::buffa::impl_view_reborrow!(ResumeScheduleView); /** Self-contained, `'static` owned view of a `ResumeSchedule` message. Wraps [`::buffa::OwnedView`]`<`[`ResumeScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -219,8 +190,14 @@ impl ResumeScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ResumeSchedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.rs index 502a4903a..5228f9d32 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.resume_schedule.rs @@ -25,12 +25,7 @@ impl ResumeSchedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ResumeSchedule"; } -impl ::buffa::DefaultInstance for ResumeSchedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ResumeSchedule); impl ::buffa::MessageName for ResumeSchedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ResumeSchedule"; @@ -58,15 +53,13 @@ impl ::buffa::Message for ResumeSchedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -74,17 +67,14 @@ impl ::buffa::Message for ResumeSchedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.__view.rs index 5ae3fc9e3..59b5c2c81 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.__view.rs @@ -8,237 +8,222 @@ pub struct ScheduleView<'a> { super::super::__buffa::view::oneof::schedule::Kind<'a>, >, } -impl<'a> ScheduleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleView<'a> { + type Owned = super::super::Schedule; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::At( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::At( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::At( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::AtView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Every( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Every( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Every( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::EveryView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Cron( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Cron( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Cron( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::CronView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule::Kind::Rrule( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule::Kind::Rrule( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule::Kind::Rrule( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule::RRuleView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleView<'a> { - type Owned = super::super::Schedule; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::Schedule { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::Schedule { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::Schedule { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::schedule::Kind::At(v) => { - super::super::__buffa::oneof::schedule::Kind::At( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Every(v) => { - super::super::__buffa::oneof::schedule::Kind::Every( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Cron(v) => { - super::super::__buffa::oneof::schedule::Kind::Cron( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule::Kind::Rrule(v) => { - super::super::__buffa::oneof::schedule::Kind::Rrule( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::Schedule { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::schedule::Kind::At(v) => { + super::super::__buffa::oneof::schedule::Kind::At( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Every( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Every( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Cron( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Cron( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule::Kind::Rrule( + v, + ) => { + super::super::__buffa::oneof::schedule::Kind::Rrule( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleView<'a> { @@ -296,39 +281,35 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleView<'a> { if let ::core::option::Option::Some(ref v) = self.kind { match v { super::super::__buffa::view::oneof::schedule::Kind::At(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Every(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Cron(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule::Kind::Rrule(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -378,24 +359,8 @@ impl<'a> ::buffa::MessageName for ScheduleView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Schedule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleView<'static> { - type Reborrowed<'b> = ScheduleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleView); +::buffa::impl_view_reborrow!(ScheduleView); /** Self-contained, `'static` owned view of a `Schedule` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -452,8 +417,14 @@ impl ScheduleOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::Schedule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -519,111 +490,105 @@ pub mod schedule { >, } impl<'a> AtView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_at(&self) -> bool { + self.at.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for AtView<'a> { + type Owned = super::super::super::schedule::At; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } - } - impl<'a> ::buffa::MessageView<'a> for AtView<'a> { - type Owned = super::super::super::schedule::At; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule::At { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::At { + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::At { + ::core::result::Result::Ok(super::super::super::schedule::At { at: match self.at.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for AtView<'a> { @@ -651,12 +616,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.at.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.at.write_to(__cache, buf); } } @@ -693,24 +657,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Schedule.At"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.At"; } - impl<'v> ::buffa::DefaultViewInstance for AtView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for AtView<'static> { - type Reborrowed<'b> = AtView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(AtView); + ::buffa::impl_view_reborrow!(AtView); /** Self-contained, `'static` owned view of a `At` message. Wraps [`::buffa::OwnedView`]`<`[`AtView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -765,8 +713,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::At { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::At, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -828,111 +785,105 @@ pub mod schedule { >, } impl<'a> EveryView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `every` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_every(&self) -> bool { + self.every.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for EveryView<'a> { + type Owned = super::super::super::schedule::Every; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.every.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.every.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.every = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::DurationView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.every = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::DurationView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } - } - impl<'a> ::buffa::MessageView<'a> for EveryView<'a> { - type Owned = super::super::super::schedule::Every; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::super::schedule::Every { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::Every { + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::Every { + ::core::result::Result::Ok(super::super::super::schedule::Every { every: match self.every.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Duration, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for EveryView<'a> { @@ -960,12 +911,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.every.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.every.write_to(__cache, buf); } } @@ -1002,24 +952,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Schedule.Every"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.Every"; } - impl<'v> ::buffa::DefaultViewInstance for EveryView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for EveryView<'static> { - type Reborrowed<'b> = EveryView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(EveryView); + ::buffa::impl_view_reborrow!(EveryView); /** Self-contained, `'static` owned view of a `Every` message. Wraps [`::buffa::OwnedView`]`<`[`EveryView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1078,8 +1012,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::Every { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Every, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1148,88 +1091,25 @@ pub mod schedule { 'a, >, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> CronView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + /**Whether required field `expr` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_expr(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.expr = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.timezone.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.timezone = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::google::r#type::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `timezone` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_timezone(&self) -> bool { + self.timezone.is_set() } } impl<'a> ::buffa::MessageView<'a> for CronView<'a> { @@ -1237,37 +1117,100 @@ pub mod schedule { fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.expr = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.timezone.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? + } + None => { + view.timezone = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule::Cron { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::Cron { + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::Cron { + ::core::result::Result::Ok(super::super::super::schedule::Cron { expr: self.expr.to_string(), timezone: match self.timezone.as_option() { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::google::r#type::TimeZone, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for CronView<'a> { @@ -1295,19 +1238,13 @@ pub mod schedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.expr, buf); + ::buffa::types::put_string_field(1u32, &self.expr, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } } @@ -1347,24 +1284,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Schedule.Cron"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.Cron"; } - impl<'v> ::buffa::DefaultViewInstance for CronView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for CronView<'static> { - type Reborrowed<'b> = CronView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(CronView); + ::buffa::impl_view_reborrow!(CronView); /** Self-contained, `'static` owned view of a `Cron` message. Wraps [`::buffa::OwnedView`]`<`[`CronView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1421,8 +1342,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::Cron { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::Cron, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -1522,190 +1452,183 @@ pub mod schedule { 'a, ::buffa_types::google::protobuf::__buffa::view::TimestampView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> RRuleView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `dtstart` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_dtstart(&self) -> bool { + self.dtstart.is_set() + } + /**Whether required field `rrule` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_rrule(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `timezone` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_timezone(&self) -> bool { + self.timezone.is_set() + } + } + impl<'a> ::buffa::MessageView<'a> for RRuleView<'a> { + type Owned = super::super::super::schedule::RRule; + fn decode_view( buf: &'a [u8], - depth: u32, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result { + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.dtstart.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.dtstart = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 2u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.rrule = ::buffa::types::borrow_str(&mut cur)?; - } - 3u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.timezone.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.timezone = ::buffa::MessageFieldView::set( - super::super::super::super::super::super::super::google::r#type::__buffa::view::TimeZoneView::_decode_depth( - sub, - depth - 1, - )?, - ); - } - } - } - 4u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.dtstart.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.rdate - .push( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( + None => { + view.dtstart = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - 5u32 => { - if tag.wire_type() - != ::buffa::encoding::WireType::LengthDelimited - { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.rrule = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.timezone.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view( + existing, + sub, + __sub_ctx, + )? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - view.exdate - .push( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( + None => { + view.timezone = ::buffa::MessageFieldView::set( + ::decode_view_ctx( sub, - depth - 1, + __sub_ctx, )?, ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + } } } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.rdate + .push( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + view.exdate + .push( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) + ::core::result::Result::Ok(cur) } - } - impl<'a> ::buffa::MessageView<'a> for RRuleView<'a> { - type Owned = super::super::super::schedule::RRule; - fn decode_view( - buf: &'a [u8], - ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) - } - fn to_owned_message(&self) -> super::super::super::schedule::RRule { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule::RRule { + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule::RRule { + ::core::result::Result::Ok(super::super::super::schedule::RRule { dtstart: match self.dtstart.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -1714,7 +1637,7 @@ pub mod schedule { Some(v) => { ::buffa::MessageField::< super::super::super::super::super::super::super::google::r#type::TimeZone, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -1722,14 +1645,14 @@ pub mod schedule { .rdate .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, exdate: self .exdate .iter() .map(|v| v.to_owned_from_source(__buffa_src)) - .collect(), + .collect::<::core::result::Result<_, ::buffa::DecodeError>>()?, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for RRuleView<'a> { @@ -1782,45 +1705,36 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.dtstart.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.dtstart.write_to(__cache, buf); } - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.rrule, buf); + ::buffa::types::put_string_field(2u32, &self.rrule, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } for v in &self.rdate { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } for v in &self.exdate { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } } @@ -1871,24 +1785,8 @@ pub mod schedule { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.Schedule.RRule"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.RRule"; } - impl<'v> ::buffa::DefaultViewInstance for RRuleView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for RRuleView<'static> { - type Reborrowed<'b> = RRuleView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(RRuleView); + ::buffa::impl_view_reborrow!(RRuleView); /** Self-contained, `'static` owned view of a `RRule` message. Wraps [`::buffa::OwnedView`]`<`[`RRuleView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -1947,8 +1845,17 @@ pub mod schedule { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule::RRule { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule::RRule, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.rs index 564ae6684..51335cfdc 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule.rs @@ -21,12 +21,7 @@ impl Schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule"; } -impl ::buffa::DefaultInstance for Schedule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(Schedule); impl ::buffa::MessageName for Schedule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Schedule"; @@ -92,39 +87,35 @@ impl ::buffa::Message for Schedule { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::schedule::Kind::At(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Every(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Cron(x) => { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule::Kind::Rrule(x) => { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -134,7 +125,7 @@ impl ::buffa::Message for Schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -142,25 +133,18 @@ impl ::buffa::Message for Schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::At(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::At( ::buffa::alloc::boxed::Box::new(val), @@ -169,25 +153,18 @@ impl ::buffa::Message for Schedule { } } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Every(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Every( ::buffa::alloc::boxed::Box::new(val), @@ -196,25 +173,18 @@ impl ::buffa::Message for Schedule { } } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Cron(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Cron( ::buffa::alloc::boxed::Box::new(val), @@ -223,25 +193,18 @@ impl ::buffa::Message for Schedule { } } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Rrule(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule::Kind::Rrule( ::buffa::alloc::boxed::Box::new(val), @@ -250,7 +213,7 @@ impl ::buffa::Message for Schedule { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -433,12 +396,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.At"; } - impl ::buffa::DefaultInstance for At { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(At); impl ::buffa::MessageName for At { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Schedule.At"; @@ -474,12 +432,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.at.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.at.write_to(__cache, buf); } } @@ -487,7 +444,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -495,21 +452,18 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.at.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -560,12 +514,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.Every"; } - impl ::buffa::DefaultInstance for Every { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Every); impl ::buffa::MessageName for Every { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Schedule.Every"; @@ -601,12 +550,11 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.every.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.every.write_to(__cache, buf); } } @@ -614,7 +562,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -622,21 +570,18 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.every.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -697,12 +642,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.Cron"; } - impl ::buffa::DefaultInstance for Cron { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Cron); impl ::buffa::MessageName for Cron { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Schedule.Cron"; @@ -738,19 +678,13 @@ pub mod schedule { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.expr, buf); + ::buffa::types::put_string_field(1u32, &self.expr, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } } @@ -758,7 +692,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -766,31 +700,25 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.expr, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.timezone.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -882,12 +810,7 @@ pub mod schedule { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.Schedule.RRule"; } - impl ::buffa::DefaultInstance for RRule { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(RRule); impl ::buffa::MessageName for RRule { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "Schedule.RRule"; @@ -948,45 +871,36 @@ pub mod schedule { #[allow(unused_imports)] use ::buffa::Enumeration as _; if self.dtstart.is_set() { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); self.dtstart.write_to(__cache, buf); } - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::types::encode_string(&self.rrule, buf); + ::buffa::types::put_string_field(2u32, &self.rrule, buf); if self.timezone.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 3u32, + __cache.consume_next(), + buf, + ); self.timezone.write_to(__cache, buf); } for v in &self.rdate { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 4u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } for v in &self.exdate { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 5u32, + __cache.consume_next(), + buf, + ); v.write_to(__cache, buf); } } @@ -994,7 +908,7 @@ pub mod schedule { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -1002,69 +916,54 @@ pub mod schedule { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.dtstart.get_or_insert_default(), buf, - depth, + ctx, )?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.rrule, buf)?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.timezone.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.rdate.push(elem); } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; let mut elem = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut elem, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut elem, buf, ctx)?; self.exdate.push(elem); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.__view.rs index 98e0c3021..3152452c0 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.__view.rs @@ -12,101 +12,87 @@ pub struct ScheduleCompletedView<'a> { /// /// Field 2: `last_occurrence_sequence` pub last_occurrence_sequence: ::core::option::Option, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleCompletedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.last_occurrence_sequence = Some( - ::buffa::types::decode_uint64(&mut cur)?, - ); - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for ScheduleCompletedView<'a> { type Owned = super::super::ScheduleCompleted; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::ScheduleCompleted { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.last_occurrence_sequence = Some( + ::buffa::types::decode_uint64(&mut cur)?, + ); + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleCompleted { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleCompleted { + ::core::result::Result::Ok(super::super::ScheduleCompleted { schedule_id: self.schedule_id.to_string(), last_occurrence_sequence: self.last_occurrence_sequence, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleCompletedView<'a> { @@ -129,13 +115,9 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleCompletedView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if let Some(v) = self.last_occurrence_sequence { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(2u32, v, buf); } } } @@ -161,16 +143,11 @@ impl<'__a> ::serde::Serialize for ScheduleCompletedView<'__a> { __map.serialize_entry("scheduleId", self.schedule_id)?; } if let ::core::option::Option::Some(__v) = self.last_occurrence_sequence { - struct _W(u64); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::uint64::serialize(&self.0, __s) - } - } - __map.serialize_entry("lastOccurrenceSequence", &_W(__v))?; + __map + .serialize_entry( + "lastOccurrenceSequence", + &::buffa::json_helpers::ProtoJson(&__v), + )?; } __map.end() } @@ -181,24 +158,8 @@ impl<'a> ::buffa::MessageName for ScheduleCompletedView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleCompleted"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleCompleted"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleCompletedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleCompletedView<'static> { - type Reborrowed<'b> = ScheduleCompletedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleCompletedView); +::buffa::impl_view_reborrow!(ScheduleCompletedView); /** Self-contained, `'static` owned view of a `ScheduleCompleted` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleCompletedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -261,8 +222,14 @@ impl ScheduleCompletedOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleCompleted { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.rs index c393ae551..860ef9fd6 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_completed.rs @@ -50,12 +50,7 @@ impl ScheduleCompleted { self } } -impl ::buffa::DefaultInstance for ScheduleCompleted { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleCompleted); impl ::buffa::MessageName for ScheduleCompleted { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleCompleted"; @@ -86,20 +81,16 @@ impl ::buffa::Message for ScheduleCompleted { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if let Some(v) = self.last_occurrence_sequence { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(2u32, v, buf); } } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -107,29 +98,23 @@ impl ::buffa::Message for ScheduleCompleted { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.last_occurrence_sequence = ::core::option::Option::Some( ::buffa::types::decode_uint64(buf)?, ); } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.__view.rs index f8c2bea1f..e8ae0f011 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.__view.rs @@ -27,187 +27,196 @@ pub struct ScheduleCreatedView<'a> { >, /// Field 5: `message` pub message: ::buffa::MessageFieldView>, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleCreatedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `status` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_status(&self) -> bool { + self.status.is_set() + } + /**Whether required field `schedule` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule(&self) -> bool { + self.schedule.is_set() + } + /**Whether required field `delivery` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_delivery(&self) -> bool { + self.delivery.is_set() + } + /**Whether required field `message` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_message(&self) -> bool { + self.message.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for ScheduleCreatedView<'a> { + type Owned = super::super::ScheduleCreated; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.status.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.status.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.status = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleStatusView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.status = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.schedule.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.schedule.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.schedule = ::buffa::MessageFieldView::set( - super::super::__buffa::view::ScheduleView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.schedule = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.delivery.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.delivery.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.delivery = ::buffa::MessageFieldView::set( - super::super::__buffa::view::DeliveryView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.delivery = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 5u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.message.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.message.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.message = ::buffa::MessageFieldView::set( - super::super::__buffa::view::MessageView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.message = ::buffa::MessageFieldView::set( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleCreatedView<'a> { - type Owned = super::super::ScheduleCreated; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::ScheduleCreated { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleCreated { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleCreated { + ::core::result::Result::Ok(super::super::ScheduleCreated { schedule_id: self.schedule_id.to_string(), status: match self.status.as_option() { Some(v) => { ::buffa::MessageField::< super::super::ScheduleStatus, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -215,7 +224,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleCreatedView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Schedule, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -223,7 +232,7 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleCreatedView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Delivery, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -231,12 +240,12 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleCreatedView<'a> { Some(v) => { ::buffa::MessageField::< super::super::Message, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleCreatedView<'a> { @@ -288,43 +297,21 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleCreatedView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if self.status.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.status.write_to(__cache, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -379,24 +366,8 @@ impl<'a> ::buffa::MessageName for ScheduleCreatedView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleCreated"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleCreated"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleCreatedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleCreatedView<'static> { - type Reborrowed<'b> = ScheduleCreatedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleCreatedView); +::buffa::impl_view_reborrow!(ScheduleCreatedView); /** Self-contained, `'static` owned view of a `ScheduleCreated` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleCreatedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -457,8 +428,14 @@ impl ScheduleCreatedOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleCreated { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.rs index 481f4f37e..bedc36b84 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_created.rs @@ -51,12 +51,7 @@ impl ScheduleCreated { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleCreated"; } -impl ::buffa::DefaultInstance for ScheduleCreated { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleCreated); impl ::buffa::MessageName for ScheduleCreated { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleCreated"; @@ -116,43 +111,21 @@ impl ::buffa::Message for ScheduleCreated { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if self.status.is_set() { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(2u32, __cache.consume_next(), buf); self.status.write_to(__cache, buf); } if self.schedule.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.schedule.write_to(__cache, buf); } if self.delivery.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.delivery.write_to(__cache, buf); } if self.message.is_set() { - ::buffa::encoding::Tag::new( - 5u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(5u32, __cache.consume_next(), buf); self.message.write_to(__cache, buf); } } @@ -160,7 +133,7 @@ impl ::buffa::Message for ScheduleCreated { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -168,73 +141,58 @@ impl ::buffa::Message for ScheduleCreated { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.status.get_or_insert_default(), buf, - depth, + ctx, )?; } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.schedule.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.delivery.get_or_insert_default(), buf, - depth, + ctx, )?; } 5u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 5u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.message.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.__view.rs index 4899d4a4b..1023ccb3c 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.__view.rs @@ -25,152 +25,154 @@ pub struct ScheduleOccurrenceRecordedView<'a> { pub recorded_at: ::buffa::MessageFieldView< ::buffa_types::google::protobuf::__buffa::view::TimestampView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleOccurrenceRecordedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `occurrence_at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_occurrence_at(&self) -> bool { + self.occurrence_at.is_set() + } + /**Whether required field `recorded_at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_recorded_at(&self) -> bool { + self.recorded_at.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for ScheduleOccurrenceRecordedView<'a> { + type Owned = super::super::ScheduleOccurrenceRecorded; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.occurrence_sequence = Some( - ::buffa::types::decode_uint64(&mut cur)?, - ); - } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.occurrence_sequence = Some( + ::buffa::types::decode_uint64(&mut cur)?, + ); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.occurrence_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.occurrence_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.occurrence_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.occurrence_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.recorded_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.recorded_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.recorded_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.recorded_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleOccurrenceRecordedView<'a> { - type Owned = super::super::ScheduleOccurrenceRecorded; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::ScheduleOccurrenceRecorded { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::ScheduleOccurrenceRecorded, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleOccurrenceRecorded { + ) -> ::core::result::Result< + super::super::ScheduleOccurrenceRecorded, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleOccurrenceRecorded { + ::core::result::Result::Ok(super::super::ScheduleOccurrenceRecorded { schedule_id: self.schedule_id.to_string(), occurrence_sequence: self.occurrence_sequence, occurrence_at: match self.occurrence_at.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -178,12 +180,12 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleOccurrenceRecordedView<'a> { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleOccurrenceRecordedView<'a> { @@ -222,30 +224,16 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleOccurrenceRecordedView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if let Some(v) = self.occurrence_sequence { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(2u32, v, buf); } if self.occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.occurrence_at.write_to(__cache, buf); } if self.recorded_at.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.recorded_at.write_to(__cache, buf); } } @@ -272,16 +260,11 @@ impl<'__a> ::serde::Serialize for ScheduleOccurrenceRecordedView<'__a> { __map.serialize_entry("scheduleId", self.schedule_id)?; } if let ::core::option::Option::Some(__v) = self.occurrence_sequence { - struct _W(u64); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::uint64::serialize(&self.0, __s) - } - } - __map.serialize_entry("occurrenceSequence", &_W(__v))?; + __map + .serialize_entry( + "occurrenceSequence", + &::buffa::json_helpers::ProtoJson(&__v), + )?; } { if let ::core::option::Option::Some(__v) = self.occurrence_at.as_option() { @@ -302,26 +285,8 @@ impl<'a> ::buffa::MessageName for ScheduleOccurrenceRecordedView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleOccurrenceRecorded"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleOccurrenceRecorded"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleOccurrenceRecordedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox< - ScheduleOccurrenceRecordedView<'static>, - > = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleOccurrenceRecordedView<'static> { - type Reborrowed<'b> = ScheduleOccurrenceRecordedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleOccurrenceRecordedView); +::buffa::impl_view_reborrow!(ScheduleOccurrenceRecordedView); /** Self-contained, `'static` owned view of a `ScheduleOccurrenceRecorded` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleOccurrenceRecordedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -384,8 +349,17 @@ impl ScheduleOccurrenceRecordedOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleOccurrenceRecorded { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::ScheduleOccurrenceRecorded, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.rs index 977c69bd7..03d70116c 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_recorded.rs @@ -63,12 +63,7 @@ impl ScheduleOccurrenceRecorded { self } } -impl ::buffa::DefaultInstance for ScheduleOccurrenceRecorded { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleOccurrenceRecorded); impl ::buffa::MessageName for ScheduleOccurrenceRecorded { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleOccurrenceRecorded"; @@ -115,30 +110,16 @@ impl ::buffa::Message for ScheduleOccurrenceRecorded { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if let Some(v) = self.occurrence_sequence { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(2u32, v, buf); } if self.occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.occurrence_at.write_to(__cache, buf); } if self.recorded_at.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.recorded_at.write_to(__cache, buf); } } @@ -146,7 +127,7 @@ impl ::buffa::Message for ScheduleOccurrenceRecorded { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -154,57 +135,45 @@ impl ::buffa::Message for ScheduleOccurrenceRecorded { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.occurrence_sequence = ::core::option::Option::Some( ::buffa::types::decode_uint64(buf)?, ); } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.occurrence_at.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.recorded_at.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.__view.rs index 6fb6a9ed3..857a3ef2e 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.__view.rs @@ -28,152 +28,154 @@ pub struct ScheduleOccurrenceScheduledView<'a> { pub scheduled_at: ::buffa::MessageFieldView< ::buffa_types::google::protobuf::__buffa::view::TimestampView<'a>, >, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleOccurrenceScheduledView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 + } + /**Whether required field `occurrence_at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_occurrence_at(&self) -> bool { + self.occurrence_at.is_set() + } + /**Whether required field `scheduled_at` is set. + +Mirrors `is_set()` on the field: `true` after decoding a message where the field was present on the wire, and `true` on a hand-built view whose field is populated. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_scheduled_at(&self) -> bool { + self.scheduled_at.is_set() + } +} +impl<'a> ::buffa::MessageView<'a> for ScheduleOccurrenceScheduledView<'a> { + type Owned = super::super::ScheduleOccurrenceScheduled; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } - view.occurrence_sequence = Some( - ::buffa::types::decode_uint64(&mut cur)?, - ); - } - 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; + view.occurrence_sequence = Some( + ::buffa::types::decode_uint64(&mut cur)?, + ); + } + 3u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.occurrence_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.occurrence_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.occurrence_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.occurrence_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); + } + 4u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + match view.scheduled_at.as_mut() { + Some(existing) => { + ::buffa::MessageView::merge_into_view(existing, sub, __sub_ctx)? } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - match view.scheduled_at.as_mut() { - Some(existing) => existing._merge_into_view(sub, depth - 1)?, - None => { - view.scheduled_at = ::buffa::MessageFieldView::set( - ::buffa_types::google::protobuf::__buffa::view::TimestampView::_decode_depth( - sub, - depth - 1, - )?, - ); - } + None => { + view.scheduled_at = ::buffa::MessageFieldView::set( + <::buffa_types::google::protobuf::__buffa::view::TimestampView as ::buffa::MessageView>::decode_view_ctx( + sub, + __sub_ctx, + )?, + ); } } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleOccurrenceScheduledView<'a> { - type Owned = super::super::ScheduleOccurrenceScheduled; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::ScheduleOccurrenceScheduled { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::ScheduleOccurrenceScheduled, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleOccurrenceScheduled { + ) -> ::core::result::Result< + super::super::ScheduleOccurrenceScheduled, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleOccurrenceScheduled { + ::core::result::Result::Ok(super::super::ScheduleOccurrenceScheduled { schedule_id: self.schedule_id.to_string(), occurrence_sequence: self.occurrence_sequence, occurrence_at: match self.occurrence_at.as_option() { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, @@ -181,12 +183,12 @@ impl<'a> ::buffa::MessageView<'a> for ScheduleOccurrenceScheduledView<'a> { Some(v) => { ::buffa::MessageField::< ::buffa_types::google::protobuf::Timestamp, - >::some(v.to_owned_from_source(__buffa_src)) + >::some(v.to_owned_from_source(__buffa_src)?) } None => ::buffa::MessageField::none(), }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleOccurrenceScheduledView<'a> { @@ -225,30 +227,16 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleOccurrenceScheduledView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if let Some(v) = self.occurrence_sequence { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(2u32, v, buf); } if self.occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.occurrence_at.write_to(__cache, buf); } if self.scheduled_at.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.scheduled_at.write_to(__cache, buf); } } @@ -275,16 +263,11 @@ impl<'__a> ::serde::Serialize for ScheduleOccurrenceScheduledView<'__a> { __map.serialize_entry("scheduleId", self.schedule_id)?; } if let ::core::option::Option::Some(__v) = self.occurrence_sequence { - struct _W(u64); - impl ::serde::Serialize for _W { - fn serialize<__S: ::serde::Serializer>( - &self, - __s: __S, - ) -> ::core::result::Result<__S::Ok, __S::Error> { - ::buffa::json_helpers::uint64::serialize(&self.0, __s) - } - } - __map.serialize_entry("occurrenceSequence", &_W(__v))?; + __map + .serialize_entry( + "occurrenceSequence", + &::buffa::json_helpers::ProtoJson(&__v), + )?; } { if let ::core::option::Option::Some(__v) = self.occurrence_at.as_option() { @@ -305,26 +288,8 @@ impl<'a> ::buffa::MessageName for ScheduleOccurrenceScheduledView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleOccurrenceScheduled"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleOccurrenceScheduled"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleOccurrenceScheduledView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox< - ScheduleOccurrenceScheduledView<'static>, - > = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleOccurrenceScheduledView<'static> { - type Reborrowed<'b> = ScheduleOccurrenceScheduledView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleOccurrenceScheduledView); +::buffa::impl_view_reborrow!(ScheduleOccurrenceScheduledView); /** Self-contained, `'static` owned view of a `ScheduleOccurrenceScheduled` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleOccurrenceScheduledView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -387,8 +352,17 @@ impl ScheduleOccurrenceScheduledOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleOccurrenceScheduled { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::ScheduleOccurrenceScheduled, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.rs index 2e598b68b..2cbbdfe74 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_occurrence_scheduled.rs @@ -66,12 +66,7 @@ impl ScheduleOccurrenceScheduled { self } } -impl ::buffa::DefaultInstance for ScheduleOccurrenceScheduled { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleOccurrenceScheduled); impl ::buffa::MessageName for ScheduleOccurrenceScheduled { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleOccurrenceScheduled"; @@ -118,30 +113,16 @@ impl ::buffa::Message for ScheduleOccurrenceScheduled { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); if let Some(v) = self.occurrence_sequence { - ::buffa::encoding::Tag::new(2u32, ::buffa::encoding::WireType::Varint) - .encode(buf); - ::buffa::types::encode_uint64(v, buf); + ::buffa::types::put_uint64_field(2u32, v, buf); } if self.occurrence_at.is_set() { - ::buffa::encoding::Tag::new( - 3u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(3u32, __cache.consume_next(), buf); self.occurrence_at.write_to(__cache, buf); } if self.scheduled_at.is_set() { - ::buffa::encoding::Tag::new( - 4u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header(4u32, __cache.consume_next(), buf); self.scheduled_at.write_to(__cache, buf); } } @@ -149,7 +130,7 @@ impl ::buffa::Message for ScheduleOccurrenceScheduled { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -157,57 +138,45 @@ impl ::buffa::Message for ScheduleOccurrenceScheduled { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::Varint { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 0u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::Varint, + )?; self.occurrence_sequence = ::core::option::Option::Some( ::buffa::types::decode_uint64(buf)?, ); } 3u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 3u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.occurrence_at.get_or_insert_default(), buf, - depth, + ctx, )?; } 4u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 4u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::Message::merge_length_delimited( self.scheduled_at.get_or_insert_default(), buf, - depth, + ctx, )?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.__view.rs index 02a319850..97af2eadf 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.__view.rs @@ -8,88 +8,77 @@ pub struct SchedulePausedView<'a> { /// /// Field 1: `schedule_id` pub schedule_id: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> SchedulePausedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for SchedulePausedView<'a> { type Owned = super::super::SchedulePaused; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::SchedulePaused { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::SchedulePaused { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::SchedulePaused { + ::core::result::Result::Ok(super::super::SchedulePaused { schedule_id: self.schedule_id.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for SchedulePausedView<'a> { @@ -109,9 +98,7 @@ impl<'a> ::buffa::ViewEncode<'a> for SchedulePausedView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } } /// Serializes this view as protobuf JSON. @@ -144,24 +131,8 @@ impl<'a> ::buffa::MessageName for SchedulePausedView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.SchedulePaused"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.SchedulePaused"; } -impl<'v> ::buffa::DefaultViewInstance for SchedulePausedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for SchedulePausedView<'static> { - type Reborrowed<'b> = SchedulePausedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(SchedulePausedView); +::buffa::impl_view_reborrow!(SchedulePausedView); /** Self-contained, `'static` owned view of a `SchedulePaused` message. Wraps [`::buffa::OwnedView`]`<`[`SchedulePausedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -222,8 +193,14 @@ impl SchedulePausedOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::SchedulePaused { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.rs index e418fc9f0..3bf6e18f6 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_paused.rs @@ -28,12 +28,7 @@ impl SchedulePaused { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.SchedulePaused"; } -impl ::buffa::DefaultInstance for SchedulePaused { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(SchedulePaused); impl ::buffa::MessageName for SchedulePaused { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "SchedulePaused"; @@ -61,15 +56,13 @@ impl ::buffa::Message for SchedulePaused { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -77,17 +70,14 @@ impl ::buffa::Message for SchedulePaused { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.__view.rs index 4cabffa68..b095dbe86 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.__view.rs @@ -8,88 +8,77 @@ pub struct ScheduleRemovedView<'a> { /// /// Field 1: `schedule_id` pub schedule_id: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleRemovedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for ScheduleRemovedView<'a> { type Owned = super::super::ScheduleRemoved; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::ScheduleRemoved { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleRemoved { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleRemoved { + ::core::result::Result::Ok(super::super::ScheduleRemoved { schedule_id: self.schedule_id.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleRemovedView<'a> { @@ -109,9 +98,7 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleRemovedView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } } /// Serializes this view as protobuf JSON. @@ -144,24 +131,8 @@ impl<'a> ::buffa::MessageName for ScheduleRemovedView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleRemoved"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleRemoved"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleRemovedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleRemovedView<'static> { - type Reborrowed<'b> = ScheduleRemovedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleRemovedView); +::buffa::impl_view_reborrow!(ScheduleRemovedView); /** Self-contained, `'static` owned view of a `ScheduleRemoved` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleRemovedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -222,8 +193,14 @@ impl ScheduleRemovedOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleRemoved { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.rs index 246ce9a1e..222ced17e 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_removed.rs @@ -30,12 +30,7 @@ impl ScheduleRemoved { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleRemoved"; } -impl ::buffa::DefaultInstance for ScheduleRemoved { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleRemoved); impl ::buffa::MessageName for ScheduleRemoved { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleRemoved"; @@ -63,15 +58,13 @@ impl ::buffa::Message for ScheduleRemoved { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -79,17 +72,14 @@ impl ::buffa::Message for ScheduleRemoved { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.__view.rs index 61d04ed90..812b78998 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.__view.rs @@ -8,88 +8,77 @@ pub struct ScheduleResumedView<'a> { /// /// Field 1: `schedule_id` pub schedule_id: &'a str, + #[doc(hidden)] + pub __buffa_required_seen_0: u64, } impl<'a> ScheduleResumedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) + /**Whether required field `schedule_id` was present on the wire. + +Distinguishes a field that was absent from one explicitly encoded with its default value (required scalar fields are stored as bare, non-`Option` types, so the value alone cannot tell the two apart). Presence is recorded only by the wire decoder: a default or hand-built view reports `false`. Encoding is unaffected — required fields are always written.*/ + #[must_use] + #[inline] + pub const fn has_schedule_id(&self) -> bool { + self.__buffa_required_seen_0 & 1u64 != 0 } } impl<'a> ::buffa::MessageView<'a> for ScheduleResumedView<'a> { type Owned = super::super::ScheduleResumed; fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::ScheduleResumed { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + view.schedule_id = ::buffa::types::borrow_str(&mut cur)?; + view.__buffa_required_seen_0 |= 1u64; + } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleResumed { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleResumed { + ::core::result::Result::Ok(super::super::ScheduleResumed { schedule_id: self.schedule_id.to_string(), ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleResumedView<'a> { @@ -109,9 +98,7 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleResumedView<'a> { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } } /// Serializes this view as protobuf JSON. @@ -144,24 +131,8 @@ impl<'a> ::buffa::MessageName for ScheduleResumedView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleResumed"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleResumed"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleResumedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleResumedView<'static> { - type Reborrowed<'b> = ScheduleResumedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleResumedView); +::buffa::impl_view_reborrow!(ScheduleResumedView); /** Self-contained, `'static` owned view of a `ScheduleResumed` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleResumedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -222,8 +193,14 @@ impl ScheduleResumedOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleResumed { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.rs index 7fcfbac88..f011c040d 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_resumed.rs @@ -30,12 +30,7 @@ impl ScheduleResumed { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleResumed"; } -impl ::buffa::DefaultInstance for ScheduleResumed { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleResumed); impl ::buffa::MessageName for ScheduleResumed { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleResumed"; @@ -63,15 +58,13 @@ impl ::buffa::Message for ScheduleResumed { ) { #[allow(unused_imports)] use ::buffa::Enumeration as _; - ::buffa::encoding::Tag::new(1u32, ::buffa::encoding::WireType::LengthDelimited) - .encode(buf); - ::buffa::types::encode_string(&self.schedule_id, buf); + ::buffa::types::put_string_field(1u32, &self.schedule_id, buf); } fn merge_field( &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -79,17 +72,14 @@ impl ::buffa::Message for ScheduleResumed { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; ::buffa::types::merge_string(&mut self.schedule_id, buf)?; } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.__view.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.__view.rs index bcaa121e1..81eb68486 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.__view.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.__view.rs @@ -7,163 +7,144 @@ pub struct ScheduleStatusView<'a> { super::super::__buffa::view::oneof::schedule_status::Kind<'a>, >, } -impl<'a> ScheduleStatusView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( +impl<'a> ::buffa::MessageView<'a> for ScheduleStatusView<'a> { + type Owned = super::super::ScheduleStatus; + fn decode_view(buf: &'a [u8]) -> ::core::result::Result { + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) + } + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) + ::decode_view_ctx(buf, ctx) } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( + fn merge_view_field( &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; #[allow(unused_variables)] let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + let mut cur = cur; + match tag.field_number() { + 1u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule_status::ScheduledView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } + ), + ); } - 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } - if depth == 0 { - return Err(::buffa::DecodeError::RecursionLimitExceeded); - } - let sub = ::buffa::types::borrow_bytes(&mut cur)?; - if let Some( + } + 2u32 => { + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; + let __sub_ctx = ctx.descend()?; + let sub = ::buffa::types::borrow_bytes(&mut cur)?; + if let Some( + super::super::__buffa::view::oneof::schedule_status::Kind::Paused( + ref mut existing, + ), + ) = view.kind + { + ::buffa::MessageView::merge_into_view( + &mut **existing, + sub, + __sub_ctx, + )?; + } else { + view.kind = Some( super::super::__buffa::view::oneof::schedule_status::Kind::Paused( - ref mut existing, - ), - ) = view.kind - { - existing._merge_into_view(sub, depth - 1)?; - } else { - view.kind = Some( - super::super::__buffa::view::oneof::schedule_status::Kind::Paused( - ::buffa::alloc::boxed::Box::new( - super::super::__buffa::view::schedule_status::PausedView::_decode_depth( - sub, - depth - 1, - )?, - ), + ::buffa::alloc::boxed::Box::new( + ::decode_view_ctx( + sub, + __sub_ctx, + )?, ), - ); - } - } - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; + ), + ); } } + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } } - ::core::result::Result::Ok(()) - } -} -impl<'a> ::buffa::MessageView<'a> for ScheduleStatusView<'a> { - type Owned = super::super::ScheduleStatus; - fn decode_view(buf: &'a [u8]) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) - } - fn decode_view_with_limit( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::ScheduleStatus { + fn to_owned_message( + &self, + ) -> ::core::result::Result { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::ScheduleStatus { + ) -> ::core::result::Result { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::ScheduleStatus { - kind: self - .kind - .as_ref() - .map(|v| match v { - super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( - v, - ) => { - super::super::__buffa::oneof::schedule_status::Kind::Scheduled( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - super::super::__buffa::view::oneof::schedule_status::Kind::Paused( - v, - ) => { - super::super::__buffa::oneof::schedule_status::Kind::Paused( - ::buffa::alloc::boxed::Box::new( - v.to_owned_from_source(__buffa_src), - ), - ) - } - }), + ::core::result::Result::Ok(super::super::ScheduleStatus { + kind: match self.kind.as_ref() { + ::core::option::Option::Some(v) => { + ::core::option::Option::Some( + match v { + super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( + v, + ) => { + super::super::__buffa::oneof::schedule_status::Kind::Scheduled( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + super::super::__buffa::view::oneof::schedule_status::Kind::Paused( + v, + ) => { + super::super::__buffa::oneof::schedule_status::Kind::Paused( + ::buffa::alloc::boxed::Box::new( + v.to_owned_from_source(__buffa_src)?, + ), + ) + } + }, + ) + } + ::core::option::Option::None => ::core::option::Option::None, + }, ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduleStatusView<'a> { @@ -209,21 +190,19 @@ impl<'a> ::buffa::ViewEncode<'a> for ScheduleStatusView<'a> { super::super::__buffa::view::oneof::schedule_status::Kind::Scheduled( x, ) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } super::super::__buffa::view::oneof::schedule_status::Kind::Paused(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -269,24 +248,8 @@ impl<'a> ::buffa::MessageName for ScheduleStatusView<'a> { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleStatus"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleStatus"; } -impl<'v> ::buffa::DefaultViewInstance for ScheduleStatusView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } -} -impl ::buffa::ViewReborrow for ScheduleStatusView<'static> { - type Reborrowed<'b> = ScheduleStatusView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } -} +::buffa::impl_default_view_instance!(ScheduleStatusView); +::buffa::impl_view_reborrow!(ScheduleStatusView); /** Self-contained, `'static` owned view of a `ScheduleStatus` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduleStatusView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -347,8 +310,14 @@ impl ScheduleStatusOwnedView { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::ScheduleStatus { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -410,78 +379,63 @@ pub mod schedule_status { #[doc(hidden)] pub __buffa_phantom: ::core::marker::PhantomData<&'a ()>, } - impl<'a> ScheduledView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) - } - } impl<'a> ::buffa::MessageView<'a> for ScheduledView<'a> { type Owned = super::super::super::schedule_status::Scheduled; fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) + } + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) } - fn to_owned_message(&self) -> super::super::super::schedule_status::Scheduled { + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule_status::Scheduled, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule_status::Scheduled { + ) -> ::core::result::Result< + super::super::super::schedule_status::Scheduled, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule_status::Scheduled { + ::core::result::Result::Ok(super::super::super::schedule_status::Scheduled { ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for ScheduledView<'a> { @@ -529,24 +483,8 @@ pub mod schedule_status { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleStatus.Scheduled"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleStatus.Scheduled"; } - impl<'v> ::buffa::DefaultViewInstance for ScheduledView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for ScheduledView<'static> { - type Reborrowed<'b> = ScheduledView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(ScheduledView); + ::buffa::impl_view_reborrow!(ScheduledView); /** Self-contained, `'static` owned view of a `Scheduled` message. Wraps [`::buffa::OwnedView`]`<`[`ScheduledView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -605,10 +543,17 @@ pub mod schedule_status { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). pub fn to_owned_message( &self, - ) -> super::super::super::schedule_status::Scheduled { + ) -> ::core::result::Result< + super::super::super::schedule_status::Scheduled, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. @@ -658,78 +603,63 @@ pub mod schedule_status { #[doc(hidden)] pub __buffa_phantom: ::core::marker::PhantomData<&'a ()>, } - impl<'a> PausedView<'a> { - /// Decode from `buf`, enforcing a recursion depth limit for nested messages. - /// - /// Called by [`::buffa::MessageView::decode_view`] with [`::buffa::RECURSION_LIMIT`] - /// and by generated sub-message decode arms with `depth - 1`. - /// - /// **Not part of the public API.** Named with a leading underscore to - /// signal that it is for generated-code use only. - #[doc(hidden)] - pub fn _decode_depth( - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result { - let mut view = Self::default(); - view._merge_into_view(buf, depth)?; - ::core::result::Result::Ok(view) - } - /// Merge fields from `buf` into this view (proto merge semantics). - /// - /// Repeated fields append; singular fields last-wins; singular - /// MESSAGE fields merge recursively. Used by sub-message decode - /// arms when the same field appears multiple times on the wire. - /// - /// **Not part of the public API.** - #[doc(hidden)] - pub fn _merge_into_view( - &mut self, - buf: &'a [u8], - depth: u32, - ) -> ::core::result::Result<(), ::buffa::DecodeError> { - let _ = depth; - #[allow(unused_variables)] - let view = self; - let mut cur: &'a [u8] = buf; - while !cur.is_empty() { - let tag = ::buffa::encoding::Tag::decode(&mut cur)?; - match tag.field_number() { - _ => { - ::buffa::encoding::skip_field_depth(tag, &mut cur, depth)?; - } - } - } - ::core::result::Result::Ok(()) - } - } impl<'a> ::buffa::MessageView<'a> for PausedView<'a> { type Owned = super::super::super::schedule_status::Paused; fn decode_view( buf: &'a [u8], ) -> ::core::result::Result { - Self::_decode_depth(buf, ::buffa::RECURSION_LIMIT) + let __limit = ::core::cell::Cell::new(::buffa::DEFAULT_UNKNOWN_FIELD_LIMIT); + ::decode_view_ctx( + buf, + ::buffa::DecodeContext::new(::buffa::RECURSION_LIMIT, &__limit), + ) } - fn decode_view_with_limit( + fn decode_view_with_ctx( buf: &'a [u8], - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result { - Self::_decode_depth(buf, depth) + ::decode_view_ctx(buf, ctx) } - fn to_owned_message(&self) -> super::super::super::schedule_status::Paused { + fn merge_view_field( + &mut self, + tag: ::buffa::encoding::Tag, + cur: &'a [u8], + _before_tag: &'a [u8], + ctx: ::buffa::DecodeContext<'_>, + ) -> ::core::result::Result<&'a [u8], ::buffa::DecodeError> { + let _ = ctx; + #[allow(unused_variables)] + let view = self; + let mut cur = cur; + match tag.field_number() { + _ => { + ::buffa::encoding::skip_field_depth(tag, &mut cur, ctx.depth())?; + } + } + ::core::result::Result::Ok(cur) + } + fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule_status::Paused, + ::buffa::DecodeError, + > { self.to_owned_from_source(None) } #[allow(clippy::useless_conversion, clippy::needless_update)] fn to_owned_from_source( &self, __buffa_src: ::core::option::Option<&::buffa::bytes::Bytes>, - ) -> super::super::super::schedule_status::Paused { + ) -> ::core::result::Result< + super::super::super::schedule_status::Paused, + ::buffa::DecodeError, + > { #[allow(unused_imports)] use ::buffa::alloc::string::ToString as _; let _ = __buffa_src; - super::super::super::schedule_status::Paused { + ::core::result::Result::Ok(super::super::super::schedule_status::Paused { ..::core::default::Default::default() - } + }) } } impl<'a> ::buffa::ViewEncode<'a> for PausedView<'a> { @@ -777,24 +707,8 @@ pub mod schedule_status { const FULL_NAME: &'static str = "trogonai.scheduler.schedules.v1.ScheduleStatus.Paused"; const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleStatus.Paused"; } - impl<'v> ::buffa::DefaultViewInstance for PausedView<'v> { - fn default_view_instance<'a>() -> &'a Self - where - Self: 'a, - { - static VALUE: ::buffa::__private::OnceBox> = ::buffa::__private::OnceBox::new(); - VALUE - .get_or_init(|| ::buffa::alloc::boxed::Box::new( - >::default(), - )) - } - } - impl ::buffa::ViewReborrow for PausedView<'static> { - type Reborrowed<'b> = PausedView<'b>; - fn reborrow<'b>(this: &'b Self) -> &'b Self::Reborrowed<'b> { - this - } - } + ::buffa::impl_default_view_instance!(PausedView); + ::buffa::impl_view_reborrow!(PausedView); /** Self-contained, `'static` owned view of a `Paused` message. Wraps [`::buffa::OwnedView`]`<`[`PausedView`]`<'static>>`: the decoded view and the [`::buffa::bytes::Bytes`] buffer it borrows from travel together, so the handle is `'static` and `Send + Sync` — suitable for async handlers, spawned tasks, and anywhere a `'static` bound is required. @@ -853,8 +767,17 @@ pub mod schedule_status { self.0.reborrow() } /// Convert to the owned message type. - #[must_use] - pub fn to_owned_message(&self) -> super::super::super::schedule_status::Paused { + /// + /// # Errors + /// + /// Returns an error if re-materializing preserved unknown fields + /// fails (e.g. the unknown-field limit is exceeded). + pub fn to_owned_message( + &self, + ) -> ::core::result::Result< + super::super::super::schedule_status::Paused, + ::buffa::DecodeError, + > { self.0.to_owned_message() } /// The underlying bytes buffer. diff --git a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.rs b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.rs index 162b09fe3..026ce4108 100644 --- a/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.rs +++ b/rsworkspace/crates/trogonai-proto/src/gen/trogonai.scheduler.schedules.v1.schedule_status.rs @@ -20,12 +20,7 @@ impl ScheduleStatus { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleStatus"; } -impl ::buffa::DefaultInstance for ScheduleStatus { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } -} +::buffa::impl_default_instance!(ScheduleStatus); impl ::buffa::MessageName for ScheduleStatus { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleStatus"; @@ -75,21 +70,19 @@ impl ::buffa::Message for ScheduleStatus { if let ::core::option::Option::Some(ref v) = self.kind { match v { __buffa::oneof::schedule_status::Kind::Scheduled(x) => { - ::buffa::encoding::Tag::new( - 1u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 1u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } __buffa::oneof::schedule_status::Kind::Paused(x) => { - ::buffa::encoding::Tag::new( - 2u32, - ::buffa::encoding::WireType::LengthDelimited, - ) - .encode(buf); - ::buffa::encoding::encode_varint(__cache.consume_next() as u64, buf); + ::buffa::types::put_len_delimited_header( + 2u32, + __cache.consume_next(), + buf, + ); x.write_to(__cache, buf); } } @@ -99,7 +92,7 @@ impl ::buffa::Message for ScheduleStatus { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -107,25 +100,18 @@ impl ::buffa::Message for ScheduleStatus { use ::buffa::Enumeration as _; match tag.field_number() { 1u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 1u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Scheduled(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Scheduled( ::buffa::alloc::boxed::Box::new(val), @@ -134,25 +120,18 @@ impl ::buffa::Message for ScheduleStatus { } } 2u32 => { - if tag.wire_type() != ::buffa::encoding::WireType::LengthDelimited { - return ::core::result::Result::Err(::buffa::DecodeError::WireTypeMismatch { - field_number: 2u32, - expected: 2u8, - actual: tag.wire_type() as u8, - }); - } + ::buffa::encoding::check_wire_type( + tag, + ::buffa::encoding::WireType::LengthDelimited, + )?; if let ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Paused(ref mut existing), ) = self.kind { - ::buffa::Message::merge_length_delimited( - &mut **existing, - buf, - depth, - )?; + ::buffa::Message::merge_length_delimited(&mut **existing, buf, ctx)?; } else { let mut val = ::core::default::Default::default(); - ::buffa::Message::merge_length_delimited(&mut val, buf, depth)?; + ::buffa::Message::merge_length_delimited(&mut val, buf, ctx)?; self.kind = ::core::option::Option::Some( __buffa::oneof::schedule_status::Kind::Paused( ::buffa::alloc::boxed::Box::new(val), @@ -161,7 +140,7 @@ impl ::buffa::Message for ScheduleStatus { } } _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -291,12 +270,7 @@ pub mod schedule_status { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleStatus.Scheduled"; } - impl ::buffa::DefaultInstance for Scheduled { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Scheduled); impl ::buffa::MessageName for Scheduled { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleStatus.Scheduled"; @@ -328,7 +302,7 @@ pub mod schedule_status { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -336,7 +310,7 @@ pub mod schedule_status { use ::buffa::Enumeration as _; match tag.field_number() { _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(()) @@ -380,12 +354,7 @@ pub mod schedule_status { /// Format: `type.googleapis.com/` pub const TYPE_URL: &'static str = "type.googleapis.com/trogonai.scheduler.schedules.v1.ScheduleStatus.Paused"; } - impl ::buffa::DefaultInstance for Paused { - fn default_instance() -> &'static Self { - static VALUE: ::buffa::__private::OnceBox = ::buffa::__private::OnceBox::new(); - VALUE.get_or_init(|| ::buffa::alloc::boxed::Box::new(Self::default())) - } - } + ::buffa::impl_default_instance!(Paused); impl ::buffa::MessageName for Paused { const PACKAGE: &'static str = "trogonai.scheduler.schedules.v1"; const NAME: &'static str = "ScheduleStatus.Paused"; @@ -417,7 +386,7 @@ pub mod schedule_status { &mut self, tag: ::buffa::encoding::Tag, buf: &mut impl ::buffa::bytes::Buf, - depth: u32, + ctx: ::buffa::DecodeContext<'_>, ) -> ::core::result::Result<(), ::buffa::DecodeError> { #[allow(unused_imports)] use ::buffa::bytes::Buf as _; @@ -425,7 +394,7 @@ pub mod schedule_status { use ::buffa::Enumeration as _; match tag.field_number() { _ => { - ::buffa::encoding::skip_field_depth(tag, buf, depth)?; + ::buffa::encoding::skip_field_depth(tag, buf, ctx.depth())?; } } ::core::result::Result::Ok(())