#![allow(dead_code)]
use std::borrow::Cow;
use ciborium::value::Value as CiboriumValue;
use serde::{Deserialize, Serialize};
use zerocbor_derive::{FromCbor, ToCbor};
#[derive(ToCbor, FromCbor, Serialize, Deserialize, minicbor::Encode, minicbor::Decode)]
pub struct Point {
#[n(0)]
pub x: i32,
#[n(1)]
pub y: i32,
}
#[derive(ToCbor, FromCbor, Serialize, Deserialize, minicbor::Encode, minicbor::Decode)]
#[cbor(map)]
#[allow(dead_code)]
pub struct Nested {
#[n(0)]
pub name: String,
#[n(1)]
pub p1: Point,
#[n(2)]
pub p2: Option<Point>,
#[n(3)]
pub params: Vec<i32>,
}
#[derive(ToCbor, FromCbor, Serialize, Deserialize, minicbor::Encode, minicbor::Decode)]
#[cbor(array)]
#[allow(dead_code)]
pub struct NestedArray {
#[n(0)]
pub name: String,
#[n(1)]
pub p1: Point,
#[n(2)]
pub p2: Option<Point>,
#[n(3)]
pub params: Vec<i32>,
}
#[derive(ToCbor, FromCbor)]
pub struct NoCopy<'a> {
pub str: &'a str,
#[cbor(as_bytes = true)]
pub bin: Cow<'a, [u8]>,
}
pub const SAMPLE_STR: &str = "hello, world!!";
pub const SAMPLE_BIN: &[u8] = &[1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
#[derive(Serialize, Deserialize)]
pub struct NoCopySerde<'a> {
pub str: &'a str,
#[serde(with = "serde_bytes")]
pub bin: &'a [u8],
}
impl NoCopySerde<'static> {
pub fn sample() -> Self {
NoCopySerde {
str: SAMPLE_STR,
bin: SAMPLE_BIN,
}
}
}
pub fn output_buffer(capacity: usize) -> Vec<u8> {
Vec::with_capacity(capacity)
}
pub fn value() -> CiboriumValue {
ciborium::value::Value::Map(vec![
(
CiboriumValue::Text("name".into()),
CiboriumValue::Text("zerocbor".into()),
),
(
CiboriumValue::Text("active".into()),
CiboriumValue::Bool(true),
),
(
CiboriumValue::Text("version".into()),
CiboriumValue::Integer(6.into()),
),
(
CiboriumValue::Text("ratio".into()),
CiboriumValue::Float(1.25),
),
(
CiboriumValue::Text("tags".into()),
CiboriumValue::Array(vec![
CiboriumValue::Text("cbor".into()),
CiboriumValue::Text("rust".into()),
CiboriumValue::Text("zero-copy".into()),
CiboriumValue::Text("no-std".into()),
]),
),
(
CiboriumValue::Text("authors".into()),
CiboriumValue::Array(vec![
CiboriumValue::Map(vec![
(
CiboriumValue::Text("name".into()),
CiboriumValue::Text("Alice".into()),
),
(
CiboriumValue::Text("commits".into()),
CiboriumValue::Integer(127.into()),
),
(
CiboriumValue::Text("active".into()),
CiboriumValue::Bool(true),
),
]),
CiboriumValue::Map(vec![
(
CiboriumValue::Text("name".into()),
CiboriumValue::Text("Bob".into()),
),
(
CiboriumValue::Text("commits".into()),
CiboriumValue::Integer(63.into()),
),
(
CiboriumValue::Text("active".into()),
CiboriumValue::Bool(false),
),
]),
]),
),
(
CiboriumValue::Text("metrics".into()),
CiboriumValue::Map(vec![
(
CiboriumValue::Text("downloads".into()),
CiboriumValue::Array(vec![
CiboriumValue::Integer(0.into()),
CiboriumValue::Integer(1.into()),
CiboriumValue::Integer(127.into()),
CiboriumValue::Integer(128.into()),
CiboriumValue::Integer(255.into()),
CiboriumValue::Integer(256.into()),
CiboriumValue::Integer(65535.into()),
CiboriumValue::Integer(65536.into()),
]),
),
(
CiboriumValue::Text("latencies".into()),
CiboriumValue::Array(vec![
CiboriumValue::Float(0.25),
CiboriumValue::Float(1.5),
CiboriumValue::Float(12.75),
CiboriumValue::Float(100.125),
]),
),
(CiboriumValue::Text("nullable".into()), CiboriumValue::Null),
]),
),
])
}