mirror of
https://github.com/lifegpc/pixiv_downloader.git
synced 2026-07-08 01:32:41 +08:00
Fix build scripts not build
This commit is contained in:
15
proc_macros/Cargo.toml
Normal file
15
proc_macros/Cargo.toml
Normal file
@@ -0,0 +1,15 @@
|
||||
[package]
|
||||
name = "proc_macros"
|
||||
version = "0.0.1"
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[lib]
|
||||
name = "proc_macros"
|
||||
path = "proc_macros.rs"
|
||||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
quote = "1"
|
||||
syn = "1"
|
||||
45
proc_macros/proc_macros.rs
Normal file
45
proc_macros/proc_macros.rs
Normal file
@@ -0,0 +1,45 @@
|
||||
extern crate quote;
|
||||
extern crate syn;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::Ident;
|
||||
use syn::parse_macro_input;
|
||||
|
||||
#[proc_macro]
|
||||
pub fn define_struct_reader_fn(item: TokenStream) -> TokenStream {
|
||||
let i = parse_macro_input!(item as Ident);
|
||||
let lefname = format!("read_le_{}", i);
|
||||
let lefname = Ident::new(&lefname, i.span());
|
||||
let befname = format!("read_be_{}", i);
|
||||
let befname = Ident::new(&befname, i.span());
|
||||
let stream = quote! {
|
||||
#[doc = concat!("Read [", stringify!(#i), "] in little endian.")]
|
||||
fn #lefname(&mut self) -> Result<#i, Self::Error>;
|
||||
#[doc = concat!("Read [", stringify!(#i), "] in big endian.")]
|
||||
fn #befname(&mut self) -> Result<#i, Self::Error>;
|
||||
};
|
||||
stream.into()
|
||||
}
|
||||
|
||||
#[proc_macro]
|
||||
pub fn impl_struct_reader_read(item: TokenStream) -> TokenStream {
|
||||
let i = parse_macro_input!(item as Ident);
|
||||
let lefname = format!("read_le_{}", i);
|
||||
let lefname = Ident::new(&lefname, i.span());
|
||||
let befname = format!("read_be_{}", i);
|
||||
let befname = Ident::new(&befname, i.span());
|
||||
let stream = quote! {
|
||||
fn #lefname(&mut self) -> Result<#i, Self::Error> {
|
||||
let mut buf = [0u8; std::mem::size_of::<#i>()];
|
||||
self.read_exact(&mut buf)?;
|
||||
Ok(<#i>::from_le_bytes(buf))
|
||||
}
|
||||
fn #befname(&mut self) -> Result<#i, Self::Error> {
|
||||
let mut buf = [0u8; std::mem::size_of::<#i>()];
|
||||
self.read_exact(&mut buf)?;
|
||||
Ok(<#i>::from_be_bytes(buf))
|
||||
}
|
||||
};
|
||||
stream.into()
|
||||
}
|
||||
Reference in New Issue
Block a user