mirror of
https://github.com/lifegpc/pixiv_downloader.git
synced 2026-07-08 01:32:41 +08:00
Add test timout
This commit is contained in:
@@ -11,5 +11,6 @@ path = "proc_macros.rs"
|
||||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
parse_duration = "2"
|
||||
quote = "1"
|
||||
syn = "1"
|
||||
syn = { version = "1", features = ["full"] }
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
extern crate parse_duration;
|
||||
extern crate quote;
|
||||
extern crate syn;
|
||||
|
||||
@@ -5,6 +6,9 @@ use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::parse_macro_input;
|
||||
use syn::Ident;
|
||||
use syn::ItemFn;
|
||||
use syn::LitInt;
|
||||
use syn::LitStr;
|
||||
|
||||
#[proc_macro]
|
||||
pub fn define_struct_reader_fn(item: TokenStream) -> TokenStream {
|
||||
@@ -79,3 +83,31 @@ pub fn impl_struct_writer_write(item: TokenStream) -> TokenStream {
|
||||
};
|
||||
stream.into()
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn async_timeout_test(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let ItemFn {
|
||||
attrs,
|
||||
vis,
|
||||
sig,
|
||||
block,
|
||||
} = parse_macro_input!(item as ItemFn);
|
||||
let meta = parse_macro_input!(attr as LitStr);
|
||||
let dura = parse_duration::parse(meta.value().as_str()).unwrap();
|
||||
let secs = LitInt::new(format!("{}", dura.as_secs()).as_str(), sig.ident.span());
|
||||
let nanos = LitInt::new(
|
||||
format!("{}", dura.subsec_nanos()).as_str(),
|
||||
sig.ident.span(),
|
||||
);
|
||||
let stmts = &block.stmts;
|
||||
let stream = quote! {
|
||||
#(#attrs)* #vis #sig {
|
||||
let dura = std::time::Duration::new(#secs, #nanos);
|
||||
let f = async {
|
||||
#(#stmts)*
|
||||
};
|
||||
tokio::time::timeout(dura, f).await.unwrap();
|
||||
}
|
||||
};
|
||||
stream.into()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user