libipld_base/
convert.rs

1//! Conversion to and from ipld.
2use crate::cid::Cid;
3use crate::ipld::Ipld;
4use std::collections::BTreeMap;
5
6macro_rules! derive_to_ipld_prim {
7    ($enum:ident, $ty:ty, $fn:ident) => {
8        impl From<$ty> for Ipld {
9            fn from(t: $ty) -> Self {
10                Ipld::$enum(t.$fn() as _)
11            }
12        }
13    };
14}
15
16macro_rules! derive_to_ipld {
17    ($enum:ident, $ty:ty, $fn:ident) => {
18        impl From<$ty> for Ipld {
19            fn from(t: $ty) -> Self {
20                Ipld::$enum(t.$fn())
21            }
22        }
23    };
24}
25
26derive_to_ipld!(Bool, bool, clone);
27derive_to_ipld_prim!(Integer, i8, clone);
28derive_to_ipld_prim!(Integer, i16, clone);
29derive_to_ipld_prim!(Integer, i32, clone);
30derive_to_ipld_prim!(Integer, i64, clone);
31derive_to_ipld_prim!(Integer, i128, clone);
32derive_to_ipld_prim!(Integer, isize, clone);
33derive_to_ipld_prim!(Integer, u8, clone);
34derive_to_ipld_prim!(Integer, u16, clone);
35derive_to_ipld_prim!(Integer, u32, clone);
36derive_to_ipld_prim!(Integer, u64, clone);
37derive_to_ipld_prim!(Integer, usize, clone);
38derive_to_ipld_prim!(Float, f32, clone);
39derive_to_ipld_prim!(Float, f64, clone);
40derive_to_ipld!(String, String, into);
41derive_to_ipld!(String, &str, to_string);
42derive_to_ipld!(Bytes, Vec<u8>, into);
43derive_to_ipld!(Bytes, &[u8], to_vec);
44derive_to_ipld!(List, Vec<Ipld>, into);
45derive_to_ipld!(Map, BTreeMap<String, Ipld>, to_owned);
46derive_to_ipld!(Link, Cid, clone);
47derive_to_ipld!(Link, &Cid, to_owned);