1use proc_macro2::TokenStream;
2use quote::quote;
3use synstructure::{decl_derive, Structure};
4
5decl_derive!([DagCbor, attributes(ipld)] => dag_cbor_derive);
6
7mod gen;
8
9fn dag_cbor_derive(s: Structure) -> TokenStream {
10 let write_cbor = gen::write_cbor(&s);
11 let read_cbor = gen::read_cbor(&s);
12 s.gen_impl(quote! {
13 use libipld::cbor::IpldError;
14 use libipld::cbor::{ReadCbor, WriteCbor, CborResult as Result};
15 use libipld::cbor::encode::{write_u64, Write};
16 use libipld::cbor::decode::{read_u8, read_key, Read};
17
18 gen impl WriteCbor for @Self {
19 #write_cbor
20 }
21
22 gen impl ReadCbor for @Self {
23 #read_cbor
24 }
25 })
26}
27
28#[cfg(test)]
29mod tests {
30 #[test]
31 fn test() {
32 let t = trybuild::TestCases::new();
33 t.pass("examples/basic.rs");
34 t.pass("examples/name_attr.rs");
35 }
37}