Skip to content

Commit 1b3c9e9

Browse files
committed
Add mocked derive implementation
1 parent e185bd1 commit 1b3c9e9

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

objc2-proc-macros/src/derive.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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+
}

objc2-proc-macros/src/lib.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ extern "C" {}
1919

2020
use proc_macro::TokenStream;
2121

22+
mod derive;
23+
2224
/// TODO
2325
#[proc_macro_derive(Encode)]
2426
pub 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)]
3133
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)
3436
}

0 commit comments

Comments
 (0)