File tree Expand file tree Collapse file tree 2 files changed +34
-4
lines changed
Expand file tree Collapse file tree 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" {}
1919
2020use proc_macro:: TokenStream ;
2121
22+ mod derive;
23+
2224/// TODO
2325#[ proc_macro_derive( Encode ) ]
2426pub fn encode_derive ( input : TokenStream ) -> TokenStream {
25- dbg ! ( input) ;
26- todo ! ( )
27+ let ast = syn :: parse ( input) . unwrap ( ) ;
28+ derive :: impl_encode ( & ast )
2729}
2830
2931/// TODO
3032#[ proc_macro_derive( RefEncode ) ]
3133pub 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 )
3436}
You can’t perform that action at this time.
0 commit comments