extern crate quick_protobuf;
mod pb_rs;
use std::borrow::Cow;
use crate::pb_rs::data_types::mod_FooMessage::OneOftest_oneof;
use crate::pb_rs::data_types::{self, FooMessage};
use crate::pb_rs::a::b::ImportedMessage;
use quick_protobuf::{deserialize_from_slice, serialize_into_vec, BytesReader, Writer};
fn main() {
let message = FooMessage {
f_int32: Some(54),
f_string: Some(Cow::Borrowed("Hello world from example!")),
f_bytes: Some(Cow::Borrowed(b"I see you!")),
f_imported: Some(ImportedMessage { i: Some(true) }),
f_nested: Some(data_types::mod_BazMessage::Nested {
f_nested: data_types::mod_BazMessage::mod_Nested::NestedMessage { f_nested: 2 },
}),
f_nested_enum: Some(data_types::mod_BazMessage::mod_Nested::NestedEnum::Baz),
f_map: vec![(Cow::Borrowed("foo"), 1), (Cow::Borrowed("bar"), 2)]
.into_iter()
.collect(),
test_oneof: OneOftest_oneof::f1(2),
..FooMessage::default()
};
let mut out = Vec::new();
{
let mut writer = Writer::new(&mut out);
writer
.write_message(&message)
.expect("Cannot write message!");
}
println!("Message written successfully!");
let out_vec = serialize_into_vec(&message).expect("Cannot write message!");
assert_eq!(out, out_vec);
let read_message = {
let mut reader = BytesReader::from_bytes(&out);
reader
.read_message::<FooMessage>(&out)
.expect("Cannot read message")
};
assert_eq!(message, read_message);
let read_vec = deserialize_from_slice(&out).expect("Cannot write message!");
assert_eq!(message, read_vec);
println!("Message read back and everything matches!");
println!("{:#?}", read_message);
}