Files
zeekay ed429a2283 rename capnp/capnpc → zap/zapc — ZAP-native runtime, no Cap'n Proto
Cap'n Proto was the canonical name for this Rust implementation. The
ZAP rebrand had only been applied as a directory rename so far —
crate names, schema file extensions, import paths, and binaries all
still said `capnp` / `capnpc`. This commit makes the rebrand real.

Workspace renames:
- crate capnp/  → zap/  (name = "zap")
- crate capnpc/ → zapc/ (name = "zapc")
- crate capnp-futures/ → zap-futures/
- crate capnp-rpc/     → zap-rpc/

Source-file renames:
- *_capnp.rs → *_zap.rs (~12 files: schema_zap.rs, rpc_zap.rs, etc.)
- capnpc-rust.rs → zapc-rust.rs (the codegen binary entry point)
- *.capnp → *.zap (33 schema files)

Identifier renames across the workspace (96 files rewritten):
- `use capnp::`             → `use zap::`
- `extern crate capnp`      → `extern crate zap`
- `capnp::generated_code!`  → `zap::generated_code!`
- `capnp::traits::Owned`    → `zap::traits::Owned`
- `capnp::message::...`     → `zap::message::...`
- `capnp::Error/Result`     → `zap::Error/Result`
- `capnp::Word`             → `zap::Word`
- `capnp::primitive_list`   → `zap::primitive_list`
- `capnp::any_pointer`      → `zap::any_pointer`
- (etc. — see python script in commit history for full list)

Cargo.toml dep keys:
- `capnp = { path = ... }`  → `zap = { path = ... }`
- `[dependencies.capnp]`     → `[dependencies.zap]`
- `capnpc = { ... }`        → `zapc = { ... }`
- Per-crate name= field and bin = "capnpc-rust" → "zapc"

Schema header strip:
- `using Cxx = import "/capnp/c++.capnp";` lines removed (C++ binding
  hints; Rust output doesn't need them, and they referenced a system
  /usr/include path we don't ship)
- `$Cxx.namespace("capnp::...")` annotations removed

Build-time decoupling for the benchmark:
- Pre-generated `carsales_zap.rs`, `catrank_zap.rs`, `eval_zap.rs` are
  now committed in benchmark/. benchmark/build.rs just copies them
  into OUT_DIR instead of invoking the schema compiler at build time.
- benchmark/Cargo.toml drops the [build-dependencies] zapc entry.
  Building the benchmark needs ONLY the `zap` runtime crate; no
  schema-compiler binary, no plugin, no shell-out.

To regenerate the schema-bound .rs from .zap (developer-only step):
  cargo build --release --bin zapc
  ln -sf zapc target/release/capnpc-rust  # plugin discovery name
  cd benchmark && PATH=../target/release:$PATH \
    capnp compile -orust eval.zap catrank.zap carsales.zap

The `capnp` tool here is the upstream C++ schema-text parser — only
used as a parser frontend at codegen time, never linked into the
benchmark binary. Runtime + build = 100% zap/zapc only.

Verified by:
  cargo tree -p benchmark --release  →  no capnp dep
  grep -rE 'capnp|Capnp|CAPNP' .     →  0 hits in active source
  cargo build -p benchmark --release →  clean build, no system tool
  bash ./benchmark/bench.sh quick    →  runs end-to-end

Other workspace members (fill_random_values, addressbook,
wasm-hello-world, capnpc/test fixtures) still use build.rs schema
compilation at build time; they require a `zap` binary in PATH.
That's pre-existing — the upstream Cap'n Proto Rust workspace had the
same requirement against the `capnp` binary. Out of scope for this PR.
2026-05-27 12:36:19 -07:00

1409 lines
48 KiB
Rust

// Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors
// Licensed under the MIT License:
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
use crate::test_zap::{test_all_types, test_defaults, TestEnum};
pub fn init_test_message(mut builder: test_all_types::Builder<'_>) {
builder.set_void_field(());
builder.set_bool_field(true);
builder.set_int8_field(-123);
builder.set_int16_field(-12345);
builder.set_int32_field(-12345678);
builder.set_int64_field(-123456789012345);
builder.set_u_int8_field(234);
builder.set_u_int16_field(45678);
builder.set_u_int32_field(3456789012);
builder.set_u_int64_field(12345678901234567890);
builder.set_float32_field(1234.5);
builder.set_float64_field(-123e45);
builder.set_text_field("foo");
builder.set_data_field(b"bar");
{
let mut sub_builder = builder.reborrow().init_struct_field();
sub_builder.set_void_field(());
sub_builder.set_bool_field(true);
sub_builder.set_int8_field(-12);
sub_builder.set_int16_field(3456);
sub_builder.set_int32_field(-78901234);
sub_builder.set_int64_field(56789012345678);
sub_builder.set_u_int8_field(90);
sub_builder.set_u_int16_field(1234);
sub_builder.set_u_int32_field(56789012);
sub_builder.set_u_int64_field(345678901234567890);
sub_builder.set_float32_field(-1.25e-10);
sub_builder.set_float64_field(345f64);
sub_builder.set_text_field("baz");
sub_builder.set_data_field(b"qux");
{
let mut sub_sub_builder = sub_builder.reborrow().init_struct_field();
sub_sub_builder.set_text_field("nested");
sub_sub_builder
.init_struct_field()
.set_text_field("really nested");
}
sub_builder.set_enum_field(TestEnum::Baz);
sub_builder.reborrow().init_void_list(3);
sub_builder
.set_bool_list(&[false, true, false, true, true])
.unwrap();
sub_builder.set_int8_list(&[12, -34, -0x80, 0x7f]).unwrap();
sub_builder
.set_int16_list(&[1234, -5678, -0x8000, 0x7fff])
.unwrap();
sub_builder
.set_int32_list(&[12345678, -90123456, -0x80000000, 0x7fffffff])
.unwrap();
sub_builder
.set_int64_list(&[
123456789012345,
-678901234567890,
-0x8000000000000000,
0x7fffffffffffffff,
])
.unwrap();
sub_builder.set_u_int8_list(&[12, 34, 0, 0xff]).unwrap();
sub_builder
.set_u_int16_list(&[1234, 5678, 0, 0xffff])
.unwrap();
sub_builder
.set_u_int32_list(&[12345678, 90123456, 0, 0xffffffff])
.unwrap();
sub_builder
.set_u_int64_list(&[123456789012345, 678901234567890, 0, 0xffffffffffffffff])
.unwrap();
sub_builder
.set_float32_list(&[0f32, 1234567f32, 1e37, -1e37, 1e-37, -1e-37])
.unwrap();
sub_builder
.set_float64_list(&[0f64, 123456789012345f64, 1e306, -1e306, 1e-306, -1e-306])
.unwrap();
// ...
{
let mut struct_list = sub_builder.reborrow().init_struct_list(3);
struct_list
.reborrow()
.get(0)
.set_text_field("x structlist 1");
struct_list
.reborrow()
.get(1)
.set_text_field("x structlist 2");
struct_list
.reborrow()
.get(2)
.set_text_field("x structlist 3");
}
sub_builder
.set_enum_list(&[TestEnum::Qux, TestEnum::Bar, TestEnum::Grault])
.unwrap();
}
builder.set_enum_field(TestEnum::Corge);
builder.reborrow().init_void_list(6);
builder.set_bool_list(&[true, false, false, true]).unwrap();
// ...
builder.set_text_list(&["plugh", "xyzzy", "thud"]).unwrap();
{
let mut data_list = builder.reborrow().init_data_list(3);
data_list.set(0, b"oops");
data_list.set(1, b"exhausted");
data_list.set(2, b"rfc3092");
}
{
let mut struct_list = builder.reborrow().init_struct_list(3);
struct_list.reborrow().get(0).set_text_field("structlist 1");
struct_list.reborrow().get(1).set_text_field("structlist 2");
struct_list.reborrow().get(2).set_text_field("structlist 3");
}
// ...
}
pub trait CheckTestMessage {
fn check_test_message(_: Self);
}
macro_rules!
check_test_message_impl(($mod:ident::$typ:ident) => (
impl <'a> CheckTestMessage for $mod::$typ<'a> {
fn check_test_message(mut reader : $mod::$typ<'a>) {
#![allow(unused_mut)]
reader.reborrow().get_void_field();
assert_eq!(true, reader.reborrow().get_bool_field());
assert_eq!(-123, reader.reborrow().get_int8_field());
assert_eq!(-12345, reader.reborrow().get_int16_field());
assert_eq!(-12345678, reader.reborrow().get_int32_field());
assert_eq!(-123456789012345, reader.reborrow().get_int64_field());
assert_eq!(234, reader.reborrow().get_u_int8_field());
assert_eq!(45678, reader.reborrow().get_u_int16_field());
assert_eq!(3456789012, reader.reborrow().get_u_int32_field());
assert_eq!(12345678901234567890, reader.reborrow().get_u_int64_field());
assert_eq!(1234.5, reader.reborrow().get_float32_field());
assert_eq!(-123e45, reader.reborrow().get_float64_field());
assert_eq!("foo", reader.reborrow().get_text_field().unwrap());
assert_eq!(b"bar", &*reader.reborrow().get_data_field().unwrap());
{
let mut sub_reader = reader.reborrow().get_struct_field().unwrap();
assert_eq!((), sub_reader.reborrow().get_void_field());
assert_eq!(true, sub_reader.reborrow().get_bool_field());
assert_eq!(-12, sub_reader.reborrow().get_int8_field());
assert_eq!(3456, sub_reader.reborrow().get_int16_field());
assert_eq!(-78901234, sub_reader.reborrow().get_int32_field());
assert_eq!(56789012345678, sub_reader.reborrow().get_int64_field());
assert_eq!(90, sub_reader.reborrow().get_u_int8_field());
assert_eq!(1234, sub_reader.reborrow().get_u_int16_field());
assert_eq!(56789012, sub_reader.reborrow().get_u_int32_field());
assert_eq!(345678901234567890, sub_reader.reborrow().get_u_int64_field());
assert_eq!(-1.25e-10, sub_reader.reborrow().get_float32_field());
assert_eq!(345f64, sub_reader.reborrow().get_float64_field());
assert_eq!("baz", sub_reader.reborrow().get_text_field().unwrap());
assert_eq!(b"qux", &*sub_reader.reborrow().get_data_field().unwrap());
{
let mut sub_sub_reader = sub_reader.reborrow().get_struct_field().unwrap();
assert_eq!("nested", sub_sub_reader.reborrow().get_text_field().unwrap());
assert_eq!("really nested",
sub_sub_reader.get_struct_field().unwrap()
.get_text_field().unwrap());
}
assert!(Ok(TestEnum::Baz) == sub_reader.reborrow().get_enum_field());
assert_eq!(false, sub_reader.reborrow().has_interface_field());
assert_eq!(3, sub_reader.reborrow().get_void_list().unwrap().len());
{
let bool_list = sub_reader.reborrow().get_bool_list().unwrap();
assert_eq!(5, bool_list.len());
assert_eq!(false, bool_list.get(0));
assert_eq!(true, bool_list.get(1));
assert_eq!(false, bool_list.get(2));
assert_eq!(true, bool_list.get(3));
assert_eq!(true, bool_list.get(4));
}
{
let int8_list = sub_reader.reborrow().get_int8_list().unwrap();
assert_eq!(4, int8_list.len());
assert_eq!(12, int8_list.get(0));
assert_eq!(-34, int8_list.get(1));
assert_eq!(-0x80, int8_list.get(2));
assert_eq!(0x7f, int8_list.get(3));
}
{
let int16_list = sub_reader.reborrow().get_int16_list().unwrap();
assert_eq!(4, int16_list.len());
assert_eq!(1234, int16_list.get(0));
assert_eq!(-5678, int16_list.get(1));
assert_eq!(-0x8000, int16_list.get(2));
assert_eq!(0x7fff, int16_list.get(3));
}
{
let int32_list = sub_reader.reborrow().get_int32_list().unwrap();
assert_eq!(4, int32_list.len());
assert_eq!(12345678, int32_list.get(0));
assert_eq!(-90123456, int32_list.get(1));
assert_eq!(-0x80000000, int32_list.get(2));
assert_eq!(0x7fffffff, int32_list.get(3));
}
{
let int64_list = sub_reader.reborrow().get_int64_list().unwrap();
assert_eq!(4, int64_list.len());
assert_eq!(123456789012345, int64_list.get(0));
assert_eq!(-678901234567890, int64_list.get(1));
assert_eq!(-0x8000000000000000, int64_list.get(2));
assert_eq!(0x7fffffffffffffff, int64_list.get(3));
}
{
let uint8_list = sub_reader.reborrow().get_u_int8_list().unwrap();
assert_eq!(4, uint8_list.len());
assert_eq!(12, uint8_list.get(0));
assert_eq!(34, uint8_list.get(1));
assert_eq!(0, uint8_list.get(2));
assert_eq!(0xff, uint8_list.get(3));
}
{
let uint16_list = sub_reader.reborrow().get_u_int16_list().unwrap();
assert_eq!(4, uint16_list.len());
assert_eq!(1234, uint16_list.get(0));
assert_eq!(5678, uint16_list.get(1));
assert_eq!(0, uint16_list.get(2));
assert_eq!(0xffff, uint16_list.get(3));
}
{
let uint32_list = sub_reader.reborrow().get_u_int32_list().unwrap();
assert_eq!(4, uint32_list.len());
assert_eq!(12345678, uint32_list.get(0));
assert_eq!(90123456, uint32_list.get(1));
assert_eq!(0, uint32_list.get(2));
assert_eq!(0xffffffff, uint32_list.get(3));
}
{
let uint64_list = sub_reader.reborrow().get_u_int64_list().unwrap();
assert_eq!(4, uint64_list.len());
assert_eq!(123456789012345, uint64_list.get(0));
assert_eq!(678901234567890, uint64_list.get(1));
assert_eq!(0, uint64_list.get(2));
assert_eq!(0xffffffffffffffff, uint64_list.get(3));
}
{
let float32_list = sub_reader.reborrow().get_float32_list().unwrap();
assert_eq!(6, float32_list.len());
assert_eq!(0f32, float32_list.get(0));
assert_eq!(1234567f32, float32_list.get(1));
assert_eq!(1e37, float32_list.get(2));
assert_eq!(-1e37, float32_list.get(3));
assert_eq!(1e-37, float32_list.get(4));
assert_eq!(-1e-37, float32_list.get(5));
}
{
let float64_list = sub_reader.reborrow().get_float64_list().unwrap();
assert_eq!(6, float64_list.len());
assert_eq!(0f64, float64_list.get(0));
assert_eq!(123456789012345f64, float64_list.get(1));
assert_eq!(1e306, float64_list.get(2));
assert_eq!(-1e306, float64_list.get(3));
assert_eq!(1e-306, float64_list.get(4));
assert_eq!(-1e-306, float64_list.get(5));
}
// ...
{
let mut struct_list = sub_reader.reborrow().get_struct_list().unwrap();
assert_eq!(3, struct_list.len());
assert_eq!("x structlist 1", struct_list.reborrow().get(0).get_text_field().unwrap());
assert_eq!("x structlist 2", struct_list.reborrow().get(1).get_text_field().unwrap());
assert_eq!("x structlist 3", struct_list.reborrow().get(2).get_text_field().unwrap());
}
{
let enum_list = sub_reader.get_enum_list().unwrap();
assert_eq!(3, enum_list.len());
assert!(Ok(TestEnum::Qux) == enum_list.get(0));
assert!(Ok(TestEnum::Bar) == enum_list.get(1));
assert!(Ok(TestEnum::Grault) == enum_list.get(2));
}
}
assert!(Ok(TestEnum::Corge) == reader.reborrow().get_enum_field());
assert_eq!(6, reader.reborrow().get_void_list().unwrap().len());
{
let bool_list = reader.reborrow().get_bool_list().unwrap();
assert_eq!(4, bool_list.len());
assert_eq!(true, bool_list.get(0));
assert_eq!(false, bool_list.get(1));
assert_eq!(false, bool_list.get(2));
assert_eq!(true, bool_list.get(3));
}
// ...
{
let mut text_list = reader.reborrow().get_text_list().unwrap();
assert_eq!(3, text_list.len());
assert_eq!("plugh", text_list.reborrow().get(0).unwrap());
assert_eq!("xyzzy", text_list.reborrow().get(1).unwrap());
assert_eq!("thud", text_list.reborrow().get(2).unwrap());
}
{
let mut data_list = reader.reborrow().get_data_list().unwrap();
assert_eq!(3, data_list.len());
assert_eq!(b"oops", data_list.reborrow().get(0).unwrap());
assert_eq!(b"exhausted", data_list.reborrow().get(1).unwrap());
assert_eq!(b"rfc3092", data_list.reborrow().get(2).unwrap());
}
{
let mut struct_list = reader.reborrow().get_struct_list().unwrap();
assert_eq!(3, struct_list.len());
assert_eq!("structlist 1", struct_list.reborrow().get(0).get_text_field().unwrap());
assert_eq!("structlist 2", struct_list.reborrow().get(1).get_text_field().unwrap());
assert_eq!("structlist 3", struct_list.reborrow().get(2).get_text_field().unwrap());
}
// ...
}
}
));
check_test_message_impl!(test_all_types::Reader);
check_test_message_impl!(test_all_types::Builder);
check_test_message_impl!(test_defaults::Reader);
check_test_message_impl!(test_defaults::Builder);
pub fn dynamic_init_test_message(mut builder: ::zap::dynamic_struct::Builder<'_>) {
builder.set_named("voidField", ().into()).unwrap();
builder.set_named("boolField", true.into()).unwrap();
builder.set_named("int8Field", (-123i8).into()).unwrap();
builder.set_named("int16Field", (-12345i16).into()).unwrap();
builder
.set_named("int32Field", (-12345678i32).into())
.unwrap();
builder
.set_named("int64Field", (-123456789012345i64).into())
.unwrap();
builder.set_named("uInt8Field", (234u8).into()).unwrap();
builder.set_named("uInt16Field", (45678u16).into()).unwrap();
builder
.set_named("uInt32Field", (3456789012u32).into())
.unwrap();
builder
.set_named("uInt64Field", (12345678901234567890u64).into())
.unwrap();
builder
.set_named("float32Field", (1234.5f32).into())
.unwrap();
builder
.set_named("float64Field", (-123e45f64).into())
.unwrap();
builder.set_named("textField", "foo".into()).unwrap();
builder.set_named("dataField", b"bar"[..].into()).unwrap();
{
let mut substruct = builder
.reborrow()
.init_named("structField")
.unwrap()
.downcast::<::zap::dynamic_struct::Builder<'_>>();
substruct.set_named("voidField", ().into()).unwrap();
substruct.set_named("boolField", true.into()).unwrap();
substruct.set_named("int8Field", (-12i8).into()).unwrap();
substruct.set_named("int16Field", (3456i16).into()).unwrap();
substruct
.set_named("int32Field", (-78901234i32).into())
.unwrap();
substruct
.set_named("int64Field", (56789012345678i64).into())
.unwrap();
substruct.set_named("uInt8Field", (90u8).into()).unwrap();
substruct
.set_named("uInt16Field", (1234u16).into())
.unwrap();
substruct
.set_named("uInt32Field", (56789012u32).into())
.unwrap();
substruct
.set_named("uInt64Field", (345678901234567890u64).into())
.unwrap();
substruct
.set_named("float32Field", (-1.25e-10f32).into())
.unwrap();
substruct
.set_named("float64Field", (345f64).into())
.unwrap();
substruct.set_named("textField", "baz".into()).unwrap();
substruct.set_named("dataField", b"qux"[..].into()).unwrap();
{
let mut subsubstruct = substruct
.reborrow()
.init_named("structField")
.unwrap()
.downcast::<::zap::dynamic_struct::Builder<'_>>();
subsubstruct
.set_named("textField", "nested".into())
.unwrap();
subsubstruct
.init_named("structField")
.unwrap()
.downcast::<::zap::dynamic_struct::Builder<'_>>()
.set_named("textField", "really nested".into())
.unwrap();
}
substruct
.set_named("enumField", TestEnum::Baz.into())
.unwrap();
substruct.reborrow().initn_named("voidList", 3).unwrap();
{
let mut bool_list = substruct
.reborrow()
.initn_named("boolList", 5)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
bool_list.set(0, false.into()).unwrap();
bool_list.set(1, true.into()).unwrap();
bool_list.set(2, false.into()).unwrap();
bool_list.set(3, true.into()).unwrap();
bool_list.set(4, true.into()).unwrap();
}
{
let mut int8_list = substruct
.reborrow()
.initn_named("int8List", 4)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
int8_list.set(0, 12i8.into()).unwrap();
int8_list.set(1, (-34i8).into()).unwrap();
int8_list.set(2, (-0x80i8).into()).unwrap();
int8_list.set(3, (0x7fi8).into()).unwrap();
}
}
builder
.set_named("enumField", TestEnum::Corge.into())
.unwrap();
{
let mut void_list = builder
.reborrow()
.initn_named("voidList", 6)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
for ii in 0..6 {
void_list.set(ii, ().into()).unwrap();
}
}
{
let mut bool_list = builder
.reborrow()
.initn_named("boolList", 4)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
bool_list.set(0, true.into()).unwrap();
bool_list.set(1, false.into()).unwrap();
bool_list.set(2, false.into()).unwrap();
bool_list.set(3, true.into()).unwrap();
}
{
let mut int8_list = builder
.reborrow()
.initn_named("int8List", 2)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
int8_list.set(0, 111i8.into()).unwrap();
int8_list.set(1, (-111i8).into()).unwrap();
}
{
let mut int16_list = builder
.reborrow()
.initn_named("int16List", 2)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
int16_list.set(0, 11111i16.into()).unwrap();
int16_list.set(1, (-11111i16).into()).unwrap();
}
{
let mut int32_list = builder
.reborrow()
.initn_named("int32List", 2)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
int32_list.set(0, 111111111i32.into()).unwrap();
int32_list.set(1, (-111111111i32).into()).unwrap();
}
{
let mut int64_list = builder
.reborrow()
.initn_named("int64List", 2)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
int64_list.set(0, 1111111111111111111i64.into()).unwrap();
int64_list.set(1, (-1111111111111111111i64).into()).unwrap();
}
{
let mut uint8_list = builder
.reborrow()
.initn_named("uInt8List", 2)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
uint8_list.set(0, 111u8.into()).unwrap();
uint8_list.set(1, 222u8.into()).unwrap();
}
{
let mut uint16_list = builder
.reborrow()
.initn_named("uInt16List", 2)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
uint16_list.set(0, 33333u16.into()).unwrap();
uint16_list.set(1, 44444u16.into()).unwrap();
}
{
let mut uint32_list = builder
.reborrow()
.initn_named("uInt32List", 1)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
uint32_list.set(0, 3333333333u32.into()).unwrap();
}
{
let mut uint64_list = builder
.reborrow()
.initn_named("uInt64List", 1)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
uint64_list.set(0, 11111111111111111111u64.into()).unwrap();
}
{
let mut float32_list = builder
.reborrow()
.initn_named("float32List", 4)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
float32_list.set(0, 5555.5f32.into()).unwrap();
float32_list.set(1, f32::INFINITY.into()).unwrap();
float32_list.set(2, (-f32::INFINITY).into()).unwrap();
float32_list.set(3, f32::NAN.into()).unwrap();
}
{
let mut float64_list = builder
.reborrow()
.initn_named("float64List", 4)
.unwrap()
.downcast::<::zap::dynamic_list::Builder<'_>>();
float64_list.set(0, 7777.75f64.into()).unwrap();
float64_list.set(1, f64::INFINITY.into()).unwrap();
float64_list.set(2, (-f64::INFINITY).into()).unwrap();
float64_list.set(3, f64::NAN.into()).unwrap();
}
{
let mut text_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.initn_named("textList", 3)
.unwrap()
.downcast();
text_list.set(0, "plugh".into()).unwrap();
text_list.set(1, "xyzzy".into()).unwrap();
text_list.set(2, "thud".into()).unwrap();
}
{
let mut data_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.initn_named("dataList", 3)
.unwrap()
.downcast();
data_list.set(0, b"oops"[..].into()).unwrap();
data_list.set(1, b"exhausted"[..].into()).unwrap();
data_list.set(2, b"rfc3092"[..].into()).unwrap();
}
{
let mut struct_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.initn_named("structList", 3)
.unwrap()
.downcast();
struct_list
.reborrow()
.get(0)
.unwrap()
.downcast::<zap::dynamic_struct::Builder<'_>>()
.set_named("textField", "structlist 1".into())
.unwrap();
struct_list
.reborrow()
.get(1)
.unwrap()
.downcast::<zap::dynamic_struct::Builder<'_>>()
.set_named("textField", "structlist 2".into())
.unwrap();
struct_list
.get(2)
.unwrap()
.downcast::<zap::dynamic_struct::Builder<'_>>()
.set_named("textField", "structlist 3".into())
.unwrap();
}
{
let mut enum_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.initn_named("enumList", 2)
.unwrap()
.downcast();
enum_list.set(0, TestEnum::Foo.into()).unwrap();
enum_list.set(1, TestEnum::Garply.into()).unwrap();
}
}
pub fn dynamic_check_test_message(reader: zap::dynamic_struct::Reader<'_>) {
reader.get_named("voidField").unwrap().downcast::<()>();
assert_eq!(
true,
reader.get_named("boolField").unwrap().downcast::<bool>()
);
assert_eq!(-123i8, reader.get_named("int8Field").unwrap().downcast());
assert_eq!(
-12345i16,
reader.get_named("int16Field").unwrap().downcast()
);
assert_eq!(
-12345678i32,
reader.get_named("int32Field").unwrap().downcast()
);
assert_eq!(
-123456789012345i64,
reader.get_named("int64Field").unwrap().downcast()
);
assert_eq!(234u8, reader.get_named("uInt8Field").unwrap().downcast());
assert_eq!(
45678u16,
reader.get_named("uInt16Field").unwrap().downcast()
);
assert_eq!(
3456789012u32,
reader.get_named("uInt32Field").unwrap().downcast()
);
assert_eq!(
12345678901234567890u64,
reader.get_named("uInt64Field").unwrap().downcast()
);
assert_eq!(
1234.5f32,
reader.get_named("float32Field").unwrap().downcast()
);
assert_eq!(
-123e45f64,
reader.get_named("float64Field").unwrap().downcast()
);
assert_eq!(
"foo",
reader
.get_named("textField")
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
&b"bar"[..],
reader
.get_named("dataField")
.unwrap()
.downcast::<zap::data::Reader<'_>>()
);
{
let substruct: zap::dynamic_struct::Reader<'_> =
reader.get_named("structField").unwrap().downcast();
substruct.get_named("voidField").unwrap();
assert_eq!(
true,
substruct.get_named("boolField").unwrap().downcast::<bool>()
);
assert_eq!(-12i8, substruct.get_named("int8Field").unwrap().downcast());
assert_eq!(
3456i16,
substruct.get_named("int16Field").unwrap().downcast()
);
}
assert_eq!(
"corge",
reader
.get_named("enumField")
.unwrap()
.downcast::<zap::dynamic_value::Enum>()
.get_enumerant()
.unwrap()
.unwrap()
.get_proto()
.get_name()
.unwrap()
);
{
let void_list: zap::dynamic_list::Reader<'_> =
reader.get_named("voidList").unwrap().downcast();
assert_eq!(6, void_list.len());
for ii in 0..6 {
let () = void_list.get(ii).unwrap().downcast();
}
}
{
let bool_list: zap::dynamic_list::Reader<'_> =
reader.get_named("boolList").unwrap().downcast();
assert_eq!(4, bool_list.len());
assert_eq!(true, bool_list.get(0).unwrap().downcast());
assert_eq!(false, bool_list.get(1).unwrap().downcast());
assert_eq!(false, bool_list.get(2).unwrap().downcast());
assert_eq!(true, bool_list.get(3).unwrap().downcast());
}
{
let int8_list: zap::dynamic_list::Reader<'_> =
reader.get_named("int8List").unwrap().downcast();
assert_eq!(2, int8_list.len());
assert_eq!(111i8, int8_list.get(0).unwrap().downcast());
assert_eq!(-111i8, int8_list.get(1).unwrap().downcast());
}
{
let int16_list: zap::dynamic_list::Reader<'_> =
reader.get_named("int16List").unwrap().downcast();
assert_eq!(2, int16_list.len());
assert_eq!(11111i16, int16_list.get(0).unwrap().downcast());
assert_eq!(-11111i16, int16_list.get(1).unwrap().downcast());
}
{
let int32_list: zap::dynamic_list::Reader<'_> =
reader.get_named("int32List").unwrap().downcast();
assert_eq!(2, int32_list.len());
assert_eq!(111111111i32, int32_list.get(0).unwrap().downcast());
assert_eq!(-111111111i32, int32_list.get(1).unwrap().downcast());
}
{
let int64_list: zap::dynamic_list::Reader<'_> =
reader.get_named("int64List").unwrap().downcast();
assert_eq!(2, int64_list.len());
assert_eq!(
1111111111111111111i64,
int64_list.get(0).unwrap().downcast()
);
assert_eq!(
-1111111111111111111i64,
int64_list.get(1).unwrap().downcast()
);
}
{
let uint8_list: zap::dynamic_list::Reader<'_> =
reader.get_named("uInt8List").unwrap().downcast();
assert_eq!(2, uint8_list.len());
assert_eq!(111u8, uint8_list.get(0).unwrap().downcast());
assert_eq!(222u8, uint8_list.get(1).unwrap().downcast());
}
{
let uint16_list: zap::dynamic_list::Reader<'_> =
reader.get_named("uInt16List").unwrap().downcast();
assert_eq!(2, uint16_list.len());
assert_eq!(33333u16, uint16_list.get(0).unwrap().downcast());
assert_eq!(44444u16, uint16_list.get(1).unwrap().downcast());
}
{
let uint32_list: zap::dynamic_list::Reader<'_> =
reader.get_named("uInt32List").unwrap().downcast();
assert_eq!(1, uint32_list.len());
assert_eq!(3333333333u32, uint32_list.get(0).unwrap().downcast());
}
{
let uint64_list: zap::dynamic_list::Reader<'_> =
reader.get_named("uInt64List").unwrap().downcast();
assert_eq!(1, uint64_list.len());
assert_eq!(
11111111111111111111u64,
uint64_list.get(0).unwrap().downcast()
);
}
{
let float32_list: zap::dynamic_list::Reader<'_> =
reader.get_named("float32List").unwrap().downcast();
assert_eq!(4, float32_list.len());
assert_eq!(5555.5f32, float32_list.get(0).unwrap().downcast());
assert_eq!(f32::INFINITY, float32_list.get(1).unwrap().downcast());
assert_eq!(-f32::INFINITY, float32_list.get(2).unwrap().downcast());
assert!(float32_list.get(3).unwrap().downcast::<f32>().is_nan());
}
{
let float64_list: zap::dynamic_list::Reader<'_> =
reader.get_named("float64List").unwrap().downcast();
assert_eq!(4, float64_list.len());
assert_eq!(7777.75f64, float64_list.get(0).unwrap().downcast());
assert_eq!(f64::INFINITY, float64_list.get(1).unwrap().downcast());
assert_eq!(-f64::INFINITY, float64_list.get(2).unwrap().downcast());
assert!(float64_list.get(3).unwrap().downcast::<f64>().is_nan());
}
{
let text_list: zap::dynamic_list::Reader<'_> =
reader.get_named("textList").unwrap().downcast();
assert_eq!(3, text_list.len());
assert_eq!(
"plugh",
text_list
.get(0)
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"xyzzy",
text_list
.get(1)
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"thud",
text_list
.get(2)
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
}
{
let data_list: zap::dynamic_list::Reader<'_> =
reader.get_named("dataList").unwrap().downcast();
assert_eq!(3, data_list.len());
assert_eq!(
b"oops",
data_list
.get(0)
.unwrap()
.downcast::<zap::data::Reader<'_>>()
);
assert_eq!(
b"exhausted",
data_list
.get(1)
.unwrap()
.downcast::<zap::data::Reader<'_>>()
);
assert_eq!(
b"rfc3092",
data_list
.get(2)
.unwrap()
.downcast::<zap::data::Reader<'_>>()
);
}
{
let struct_list: zap::dynamic_list::Reader<'_> =
reader.get_named("structList").unwrap().downcast();
assert_eq!(3, struct_list.len());
assert_eq!(
"structlist 1",
struct_list
.get(0)
.unwrap()
.downcast::<zap::dynamic_struct::Reader<'_>>()
.get_named("textField")
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"structlist 2",
struct_list
.get(1)
.unwrap()
.downcast::<zap::dynamic_struct::Reader<'_>>()
.get_named("textField")
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"structlist 3",
struct_list
.get(2)
.unwrap()
.downcast::<zap::dynamic_struct::Reader<'_>>()
.get_named("textField")
.unwrap()
.downcast::<zap::text::Reader<'_>>()
);
}
{
let enum_list: zap::dynamic_list::Reader<'_> =
reader.get_named("enumList").unwrap().downcast();
assert_eq!(2, enum_list.len());
assert_eq!(
"foo",
enum_list
.get(0)
.unwrap()
.downcast::<zap::dynamic_value::Enum>()
.get_enumerant()
.unwrap()
.unwrap()
.get_proto()
.get_name()
.unwrap()
);
assert_eq!(
"garply",
enum_list
.get(1)
.unwrap()
.downcast::<zap::dynamic_value::Enum>()
.get_enumerant()
.unwrap()
.unwrap()
.get_proto()
.get_name()
.unwrap()
);
}
}
pub fn dynamic_check_test_message_builder(mut builder: zap::dynamic_struct::Builder<'_>) {
builder
.reborrow()
.get_named("voidField")
.unwrap()
.downcast::<()>();
assert_eq!(
true,
builder
.reborrow()
.get_named("boolField")
.unwrap()
.downcast::<bool>()
);
assert_eq!(
-123i8,
builder
.reborrow()
.get_named("int8Field")
.unwrap()
.downcast()
);
assert_eq!(
-12345i16,
builder
.reborrow()
.get_named("int16Field")
.unwrap()
.downcast()
);
assert_eq!(
-12345678i32,
builder
.reborrow()
.get_named("int32Field")
.unwrap()
.downcast()
);
assert_eq!(
-123456789012345i64,
builder
.reborrow()
.get_named("int64Field")
.unwrap()
.downcast()
);
assert_eq!(
234u8,
builder
.reborrow()
.get_named("uInt8Field")
.unwrap()
.downcast()
);
assert_eq!(
45678u16,
builder
.reborrow()
.get_named("uInt16Field")
.unwrap()
.downcast()
);
assert_eq!(
3456789012u32,
builder
.reborrow()
.get_named("uInt32Field")
.unwrap()
.downcast()
);
assert_eq!(
12345678901234567890u64,
builder
.reborrow()
.get_named("uInt64Field")
.unwrap()
.downcast()
);
assert_eq!(
1234.5f32,
builder
.reborrow()
.get_named("float32Field")
.unwrap()
.downcast()
);
assert_eq!(
-123e45f64,
builder
.reborrow()
.get_named("float64Field")
.unwrap()
.downcast()
);
assert_eq!(
"foo",
builder
.reborrow()
.get_named("textField")
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
&b"bar"[..],
builder
.reborrow()
.get_named("dataField")
.unwrap()
.into_reader()
.downcast::<zap::data::Reader<'_>>()
);
{
let mut substruct: zap::dynamic_struct::Builder<'_> = builder
.reborrow()
.get_named("structField")
.unwrap()
.downcast();
substruct.reborrow().get_named("voidField").unwrap();
assert_eq!(
true,
substruct
.reborrow()
.get_named("boolField")
.unwrap()
.downcast::<bool>()
);
assert_eq!(
-12i8,
substruct
.reborrow()
.get_named("int8Field")
.unwrap()
.downcast()
);
assert_eq!(
3456i16,
substruct
.reborrow()
.get_named("int16Field")
.unwrap()
.downcast()
);
}
assert_eq!(
"corge",
builder
.reborrow()
.get_named("enumField")
.unwrap()
.downcast::<zap::dynamic_value::Enum>()
.get_enumerant()
.unwrap()
.unwrap()
.get_proto()
.get_name()
.unwrap()
);
{
let mut void_list: zap::dynamic_list::Builder<'_> =
builder.reborrow().get_named("voidList").unwrap().downcast();
assert_eq!(6, void_list.len());
for ii in 0..6 {
let () = void_list.reborrow().get(ii).unwrap().downcast();
}
}
{
let mut bool_list: zap::dynamic_list::Builder<'_> =
builder.reborrow().get_named("boolList").unwrap().downcast();
assert_eq!(4, bool_list.len());
assert_eq!(true, bool_list.reborrow().get(0).unwrap().downcast());
assert_eq!(false, bool_list.reborrow().get(1).unwrap().downcast());
assert_eq!(false, bool_list.reborrow().get(2).unwrap().downcast());
assert_eq!(true, bool_list.reborrow().get(3).unwrap().downcast());
}
{
let mut int8_list: zap::dynamic_list::Builder<'_> =
builder.reborrow().get_named("int8List").unwrap().downcast();
assert_eq!(2, int8_list.len());
assert_eq!(111i8, int8_list.reborrow().get(0).unwrap().downcast());
assert_eq!(-111i8, int8_list.reborrow().get(1).unwrap().downcast());
}
{
let mut int16_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("int16List")
.unwrap()
.downcast();
assert_eq!(2, int16_list.len());
assert_eq!(11111i16, int16_list.reborrow().get(0).unwrap().downcast());
assert_eq!(-11111i16, int16_list.reborrow().get(1).unwrap().downcast());
}
{
let mut int32_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("int32List")
.unwrap()
.downcast();
assert_eq!(2, int32_list.len());
assert_eq!(
111111111i32,
int32_list.reborrow().get(0).unwrap().downcast()
);
assert_eq!(
-111111111i32,
int32_list.reborrow().get(1).unwrap().downcast()
);
}
{
let mut int64_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("int64List")
.unwrap()
.downcast();
assert_eq!(2, int64_list.len());
assert_eq!(
1111111111111111111i64,
int64_list.reborrow().get(0).unwrap().downcast()
);
assert_eq!(
-1111111111111111111i64,
int64_list.reborrow().get(1).unwrap().downcast()
);
}
{
let mut uint8_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("uInt8List")
.unwrap()
.downcast();
assert_eq!(2, uint8_list.len());
assert_eq!(111u8, uint8_list.reborrow().get(0).unwrap().downcast());
assert_eq!(222u8, uint8_list.reborrow().get(1).unwrap().downcast());
}
{
let mut uint16_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("uInt16List")
.unwrap()
.downcast();
assert_eq!(2, uint16_list.len());
assert_eq!(33333u16, uint16_list.reborrow().get(0).unwrap().downcast());
assert_eq!(44444u16, uint16_list.reborrow().get(1).unwrap().downcast());
}
{
let uint32_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("uInt32List")
.unwrap()
.downcast();
assert_eq!(1, uint32_list.len());
assert_eq!(3333333333u32, uint32_list.get(0).unwrap().downcast());
}
{
let uint64_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("uInt64List")
.unwrap()
.downcast();
assert_eq!(1, uint64_list.len());
assert_eq!(
11111111111111111111u64,
uint64_list.get(0).unwrap().downcast()
);
}
{
let mut float32_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("float32List")
.unwrap()
.downcast();
assert_eq!(4, float32_list.len());
assert_eq!(
5555.5f32,
float32_list.reborrow().get(0).unwrap().downcast()
);
assert_eq!(
f32::INFINITY,
float32_list.reborrow().get(1).unwrap().downcast()
);
assert_eq!(
-f32::INFINITY,
float32_list.reborrow().get(2).unwrap().downcast()
);
assert!(float32_list.get(3).unwrap().downcast::<f32>().is_nan());
}
{
let mut float64_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("float64List")
.unwrap()
.downcast();
assert_eq!(4, float64_list.len());
assert_eq!(
7777.75f64,
float64_list.reborrow().get(0).unwrap().downcast()
);
assert_eq!(
f64::INFINITY,
float64_list.reborrow().get(1).unwrap().downcast()
);
assert_eq!(
-f64::INFINITY,
float64_list.reborrow().get(2).unwrap().downcast()
);
assert!(float64_list.get(3).unwrap().downcast::<f64>().is_nan());
}
{
let mut text_list: zap::dynamic_list::Builder<'_> =
builder.reborrow().get_named("textList").unwrap().downcast();
assert_eq!(3, text_list.len());
assert_eq!(
"plugh",
text_list
.reborrow()
.get(0)
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"xyzzy",
text_list
.reborrow()
.get(1)
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"thud",
text_list
.reborrow()
.get(2)
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
}
{
let mut data_list: zap::dynamic_list::Builder<'_> =
builder.reborrow().get_named("dataList").unwrap().downcast();
assert_eq!(3, data_list.len());
assert_eq!(
b"oops",
data_list
.reborrow()
.get(0)
.unwrap()
.into_reader()
.downcast::<zap::data::Reader<'_>>()
);
assert_eq!(
b"exhausted",
data_list
.reborrow()
.get(1)
.unwrap()
.into_reader()
.downcast::<zap::data::Reader<'_>>()
);
assert_eq!(
b"rfc3092",
data_list
.reborrow()
.get(2)
.unwrap()
.into_reader()
.downcast::<zap::data::Reader<'_>>()
);
}
{
let mut struct_list: zap::dynamic_list::Builder<'_> = builder
.reborrow()
.get_named("structList")
.unwrap()
.downcast();
assert_eq!(3, struct_list.len());
assert_eq!(
"structlist 1",
struct_list
.reborrow()
.get(0)
.unwrap()
.downcast::<zap::dynamic_struct::Builder<'_>>()
.get_named("textField")
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"structlist 2",
struct_list
.reborrow()
.get(1)
.unwrap()
.downcast::<zap::dynamic_struct::Builder<'_>>()
.get_named("textField")
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
assert_eq!(
"structlist 3",
struct_list
.reborrow()
.get(2)
.unwrap()
.downcast::<zap::dynamic_struct::Builder<'_>>()
.get_named("textField")
.unwrap()
.into_reader()
.downcast::<zap::text::Reader<'_>>()
);
}
{
let mut enum_list: zap::dynamic_list::Builder<'_> =
builder.reborrow().get_named("enumList").unwrap().downcast();
assert_eq!(2, enum_list.len());
assert_eq!(
"foo",
enum_list
.reborrow()
.get(0)
.unwrap()
.downcast::<zap::dynamic_value::Enum>()
.get_enumerant()
.unwrap()
.unwrap()
.get_proto()
.get_name()
.unwrap()
);
assert_eq!(
"garply",
enum_list
.get(1)
.unwrap()
.downcast::<zap::dynamic_value::Enum>()
.get_enumerant()
.unwrap()
.unwrap()
.get_proto()
.get_name()
.unwrap()
);
}
}