Skip to content

Commit 0e26c83

Browse files
authored
Merge pull request #81 from Tsukuba-Programming-Lab/#78_UpdateLoadMacro
#78 load マクロの仕様修正
2 parents 9617e50 + 156b4dd commit 0e26c83

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed
Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,45 @@
11
use proc_macro2::TokenStream;
2-
use quote::quote;
3-
use syn::ItemFn;
2+
use quote::{quote, ToTokens};
3+
use syn::{ItemFn, FnArg};
44

55
pub fn proc_macro_impl_load(_args: TokenStream, ast: ItemFn) -> TokenStream {
66
let fn_visibility = ast.vis;
77
let fn_ident = ast.sig.ident;
8-
let fn_args = ast.sig.inputs;
98
let fn_ret_type = ast.sig.output;
109
let fn_body = ast.block;
1110

11+
let fn_args = ast.sig.inputs;
12+
let fn_arg_processor = &fn_args[0];
13+
let fn_args_orig_def = fn_args
14+
.iter()
15+
.skip(1)
16+
.map(|fn_arg| {
17+
let fn_arg = fn_arg.to_token_stream();
18+
quote! { #fn_arg , }
19+
})
20+
.collect::<TokenStream>();
21+
let fn_args_orig_uses = fn_args
22+
.iter()
23+
.skip(1)
24+
.map(|fn_arg| {
25+
if let FnArg::Typed(pat_type) = fn_arg {
26+
let pat = pat_type.pat.to_token_stream();
27+
quote! { #pat , }
28+
} else {
29+
panic!("Unexpected argument type");
30+
}
31+
})
32+
.collect::<TokenStream>();
33+
1234
quote! {
13-
fn #fn_ident () #fn_ret_type {
14-
#fn_visibility fn __inner (#fn_args) #fn_ret_type {
35+
fn #fn_ident (#fn_args_orig_def) #fn_ret_type {
36+
#fn_visibility fn __inner (#fn_arg_processor, #fn_args_orig_def) #fn_ret_type {
1537
#fn_body
1638
}
1739

1840
let cache_body = include_str!(concat!(env!("OUT_DIR"), "/MyProcessor.cache"));
19-
let deserialized = copager::prebuild::deserialize(&cache_body).unwrap();
20-
__inner(deserialized)
41+
let deserialized = copager::prebuild::__deserialize(&cache_body).unwrap();
42+
__inner(deserialized, #fn_args_orig_uses)
2143
}
2244
}
2345
}

crates/core_macros/src/impl/prebuild.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn proc_macro_impl_prebuild(_args: TokenStream, ast: ItemFn) -> TokenStream
1515
#fn_body
1616
}
1717

18-
let serialized = copager::prebuild::serialize(&__inner()).unwrap();
18+
let serialized = copager::prebuild::__serialize(&__inner()).unwrap();
1919
let out_dir = std::env::var_os("OUT_DIR").unwrap();
2020
let cache_path = std::path::Path::new(&out_dir).join("MyProcessor.cache");
2121
std::fs::write(cache_path, serialized).unwrap();

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ pub use copager_core_macros::*;
4242

4343
#[cfg(feature = "prebuild")]
4444
pub mod prebuild {
45-
pub use serde_json::to_string as serialize;
46-
pub use serde_json::from_str as deserialize;
45+
pub use serde_json::to_string as __serialize;
46+
pub use serde_json::from_str as __deserialize;
4747
}
4848

4949
#[cfg(feature = "template")]

0 commit comments

Comments
 (0)