1use crate::cid::Cid;
3use crate::ipld::Ipld;
4use alloc::{
5 borrow::ToOwned,
6 boxed::Box,
7 collections::BTreeMap,
8 string::{String, ToString},
9 vec::Vec,
10};
11
12macro_rules! derive_to_ipld_prim {
13 ($enum:ident, $ty:ty, $fn:ident) => {
14 impl From<$ty> for Ipld {
15 fn from(t: $ty) -> Self {
16 Ipld::$enum(t.$fn() as _)
17 }
18 }
19 };
20}
21
22macro_rules! derive_to_ipld {
23 ($enum:ident, $ty:ty, $($fn:ident),*) => {
24 impl From<$ty> for Ipld {
25 fn from(t: $ty) -> Self {
26 Ipld::$enum(t$(.$fn())*)
27 }
28 }
29 };
30}
31
32macro_rules! derive_to_ipld_generic {
33 ($enum:ident, $ty:ty, $($fn:ident),*) => {
34 impl From<$ty> for Ipld {
35 fn from(t: $ty) -> Self {
36 Ipld::$enum(t$(.$fn())*)
37 }
38 }
39 };
40}
41
42derive_to_ipld!(Bool, bool, clone);
43derive_to_ipld_prim!(Integer, i8, clone);
44derive_to_ipld_prim!(Integer, i16, clone);
45derive_to_ipld_prim!(Integer, i32, clone);
46derive_to_ipld_prim!(Integer, i64, clone);
47derive_to_ipld_prim!(Integer, i128, clone);
48derive_to_ipld_prim!(Integer, isize, clone);
49derive_to_ipld_prim!(Integer, u8, clone);
50derive_to_ipld_prim!(Integer, u16, clone);
51derive_to_ipld_prim!(Integer, u32, clone);
52derive_to_ipld_prim!(Integer, u64, clone);
53derive_to_ipld_prim!(Integer, usize, clone);
54derive_to_ipld_prim!(Float, f32, clone);
55derive_to_ipld_prim!(Float, f64, clone);
56derive_to_ipld!(String, String, into);
57derive_to_ipld!(String, &str, to_string);
58derive_to_ipld!(Bytes, Box<[u8]>, into_vec);
59derive_to_ipld!(Bytes, Vec<u8>, into);
60derive_to_ipld!(Bytes, &[u8], to_vec);
61derive_to_ipld!(List, Vec<Ipld>, into);
62derive_to_ipld!(Map, BTreeMap<String, Ipld>, to_owned);
63derive_to_ipld_generic!(Link, Cid, clone);
64derive_to_ipld_generic!(Link, &Cid, to_owned);