File tree 2 files changed +34
-4
lines changed 2 files changed +34
-4
lines changed Original file line number Diff line number Diff line change
1
+ use proc_macro:: TokenStream ;
2
+ use quote:: quote;
3
+ use syn:: DeriveInput ;
4
+
5
+ pub ( crate ) fn impl_encode ( ast : & DeriveInput ) -> TokenStream {
6
+ let name = & ast. ident ;
7
+ let gen = quote ! {
8
+ unsafe impl :: objc2_encode:: Encode for #name {
9
+ const ENCODING : :: objc2_encode:: Encoding <' static > = :: objc2_encode:: Encoding :: Struct (
10
+ stringify!( #name) ,
11
+ & [ CGFloat :: ENCODING , CGFloat :: ENCODING ] ,
12
+ ) ;
13
+ }
14
+ } ;
15
+ gen. into ( )
16
+ }
17
+
18
+ pub ( crate ) fn impl_ref_encode ( ast : & DeriveInput ) -> TokenStream {
19
+ let name = & ast. ident ;
20
+ let gen = quote ! {
21
+ unsafe impl :: objc2_encode:: RefEncode for #name {
22
+ const ENCODING_REF : :: objc2_encode:: Encoding <' static > = :: objc2_encode:: Encoding :: Pointer (
23
+ & <Self as :: objc2_encode:: Encode >:: ENCODING
24
+ ) ;
25
+ }
26
+ } ;
27
+ gen. into ( )
28
+ }
Original file line number Diff line number Diff line change @@ -19,16 +19,18 @@ extern "C" {}
19
19
20
20
use proc_macro:: TokenStream ;
21
21
22
+ mod derive;
23
+
22
24
/// TODO
23
25
#[ proc_macro_derive( Encode ) ]
24
26
pub fn encode_derive ( input : TokenStream ) -> TokenStream {
25
- dbg ! ( input) ;
26
- todo ! ( )
27
+ let ast = syn :: parse ( input) . unwrap ( ) ;
28
+ derive :: impl_encode ( & ast )
27
29
}
28
30
29
31
/// TODO
30
32
#[ proc_macro_derive( RefEncode ) ]
31
33
pub fn ref_encode_derive ( input : TokenStream ) -> TokenStream {
32
- dbg ! ( input) ;
33
- todo ! ( )
34
+ let ast = syn :: parse ( input) . unwrap ( ) ;
35
+ derive :: impl_ref_encode ( & ast )
34
36
}
You can’t perform that action at this time.
0 commit comments