1use 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);