blob: bc5503ffb4feb5d84bef62a6cd610a01e7536a02 [file] [log] [blame] [edit]
#[allow(unused)]
macro_rules! set_insert_deser_assert_macro [
[$set: ident, $data: ident, $($key: expr),*] => [
$($set.insert($key));*
;
let $data = borsh::to_vec(&$set).unwrap();
#[cfg(feature = "std")]
insta::assert_debug_snapshot!($data);
]
];
#[allow(unused)]
macro_rules! map_insert_deser_assert_macro [
[$map: ident, $data: ident, $($key: expr => $value: expr),*] => [
$($map.insert($key, $value));*
;
let $data = borsh::to_vec(&$map).unwrap();
#[cfg(feature = "std")]
insta::assert_debug_snapshot!($data);
]
];
#[allow(unused)]
macro_rules! set_wrong_order_test [
[$test_name: ident, $set_type: ty] => [
#[test]
fn $test_name() {
let mut data = vec![];
let arr_key = ["various".to_string(), "foo".to_string(), "many".to_string()];
let len = arr_key.len() as u32;
u32::serialize(&len, &mut data).expect("no error");
for key in &arr_key {
key.serialize(&mut data).expect("no error");
}
let result = from_slice::<$set_type>(&data);
#[cfg(not(feature = "de_strict_order"))]
{
let result = result.unwrap();
assert_eq!(result.len(), arr_key.len());
for key in &arr_key {
assert!(result.contains(key));
}
}
#[cfg(feature = "de_strict_order")]
{
assert!(result.is_err());
assert_eq!(result.unwrap_err().to_string(), ERROR_WRONG_ORDER_OF_KEYS);
}
}
]
];
#[allow(unused)]
macro_rules! map_wrong_order_test [
[$test_name: ident, $map_type: ty] => [
#[test]
fn $test_name() {
let mut data = vec![];
let arr_key = ["various".to_string(), "foo".to_string(), "many".to_string()];
let arr_val = [
"value".to_string(),
"different".to_string(),
"unexp".to_string(),
];
let len = arr_key.len() as u32;
u32::serialize(&len, &mut data).expect("no error");
let entries = IntoIterator::into_iter(arr_key.clone())
.zip(IntoIterator::into_iter(arr_val))
.collect::<Vec<_>>();
for (key, value) in entries.clone() {
key.serialize(&mut data).expect("no error");
value.serialize(&mut data).expect("no error");
}
let result = from_slice::<$map_type>(&data);
#[cfg(not(feature = "de_strict_order"))]
{
let result = result.unwrap();
assert_eq!(result.len(), arr_key.len());
for (key, value) in entries {
assert_eq!(result.get(&key), Some(&value));
}
}
#[cfg(feature = "de_strict_order")]
{
assert!(result.is_err());
assert_eq!(result.unwrap_err().to_string(), ERROR_WRONG_ORDER_OF_KEYS);
}
}
]
];
#[allow(unused)]
macro_rules! schema_map(
() => { BTreeMap::new() };
{ $($key:expr => $value:expr),+ } => {
{
let mut m = BTreeMap::new();
$(
m.insert($key.to_string(), $value);
)+
m
}
};
);
#[allow(unused)]
#[cfg(feature = "unstable__schema")]
pub mod schema_imports {
extern crate alloc;
pub use alloc::{
boxed::Box,
collections::BTreeMap,
format,
string::{String, ToString},
vec,
vec::Vec,
};
pub use borsh::schema::{
add_definition, BorshSchemaContainer, Declaration, Definition, Fields,
SchemaContainerValidateError, SchemaMaxSerializedSizeError,
};
pub use borsh::{schema_container_of, BorshSchema};
}