use no_proto::{error::NP_Error, NP_Factory};
fn main() -> Result<(), NP_Error> {
let user_factory = NP_Factory::new(r#"{
"type": "table",
"columns": [
["name", {"type": "string"}],
["age", {"type": "u16", "default": 0}],
["tags", {"type": "list", "of": {
"type": "string"
}}]
]
}"#)?;
println!("\n= Quick Example =\n");
let user_buffer = user_factory
.empty_buffer(None, None);
let user_bytes: Vec<u8> = user_buffer.close();
println!("bytes: {:?}", user_bytes);
let mut user_buffer = user_factory.open_buffer(user_bytes);
user_buffer.set(&["name"], "Billy Joel")?;
let name = user_buffer.get::<&str>(&["name"])?;
assert_eq!(name, Some("Billy Joel"));
println!("\nname: {}", name.unwrap());
let user_bytes: Vec<u8> = user_buffer.close();
println!("bytes: {:?}", user_bytes);
let mut user_buffer = user_factory.open_buffer(user_bytes);
user_buffer.compact(None, None)?;
user_buffer.set(&["tags", "0"], "first tag")?;
let tag = user_buffer.get::<&str>(&["tags", "0"])?;
assert_eq!(tag, Some("first tag"));
println!("\ntag: {}", tag.unwrap());
let user_bytes: Vec<u8> = user_buffer.close();
println!("bytes: {:?}", user_bytes);
let user_buffer = user_factory.open_buffer(user_bytes);
let age = user_buffer.get::<u16>(&["age"])?;
assert_eq!(age, Some(0u16));
println!("\nage: {}", age.unwrap());
let user_bytes: Vec<u8> = user_buffer.close();
println!("bytes: {:?}", user_bytes);
Ok(())
}