#![allow(noop_method_call)]
use tinyklv::prelude::*;
use tinyklv::Klv;
#[derive(Klv)]
#[klv(
stream = &[u8],
sentinel = "\x00\x00\x00",
key(dec = tinyklv::dec::binary::u8, enc = tinyklv::enc::binary::u8),
len(dec = tinyklv::dec::binary::u8_as_usize, enc = tinyklv::enc::binary::u8),
allow_unimplemented_encode,
)]
struct Foo {
#[klv(
key = 0x01,
varlen = true,
dec = "tinyklv::dec::string::to_string_utf8"
)]
name: String,
#[klv(
key = 0x02,
dec = tinyklv::dec::binary::be_u16,
)]
number: u16,
}
#[test]
fn main() {
#[rustfmt::skip]
let mut stream1: &[u8] = &[
0x00, 0x00, 0x00, 0x09, 0x01, 0x03, 0x4B, 0x4C, 0x56, 0x02, 0x02, 0x01, 0x02, ];
let stream1_ = stream1.clone();
match Foo::decode_frame(&mut stream1) {
Ok(foo) => {
assert_eq!(foo.name, "KLV");
assert_eq!(foo.number, 258);
}
Err(e) => panic!("{}", e),
}
match Foo::decode_value(&mut &stream1_[4..]) {
Ok(foo) => {
assert_eq!(foo.name, "KLV");
assert_eq!(foo.number, 258);
}
Err(e) => panic!("{}", e),
}
#[rustfmt::skip]
let mut stream2: &[u8] = &[
0x00, 0x00, 0x00, 0x12, 0x01, 0x0C, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x02,
0x02, 0x00, 0x2A, ];
let stream2_ = stream2.clone();
match Foo::decode_frame(&mut stream2) {
Ok(foo) => {
assert_eq!(foo.name, "Hello World!");
assert_eq!(foo.number, 42);
}
Err(e) => panic!("{}", e),
}
match Foo::decode_value(&mut &stream2_[4..]) {
Ok(foo) => {
assert_eq!(foo.name, "Hello World!");
assert_eq!(foo.number, 42);
}
Err(e) => panic!("{}", e),
}
}