mirror of
https://github.com/tauri-apps/tauri-bindgen.git
synced 2026-01-31 00:45:21 +01:00
macro cleanup
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
use proc_macro::TokenStream;
|
||||
use syn::parse::{Parse, ParseStream, Result};
|
||||
use syn::Token;
|
||||
use tauri_bindgen_gen_guest_rust::Opts;
|
||||
use tauri_bindgen_gen_guest_rust::Builder;
|
||||
|
||||
#[proc_macro]
|
||||
pub fn generate(input: TokenStream) -> TokenStream {
|
||||
rust_macro_shared::generate::<Opt, Opts, _>(input, |opts| Box::new(opts.build()))
|
||||
rust_macro_shared::generate::<Opt, Builder>(input)
|
||||
}
|
||||
|
||||
mod kw {
|
||||
@@ -37,11 +37,11 @@ impl Parse for Opt {
|
||||
}
|
||||
}
|
||||
|
||||
impl rust_macro_shared::Configure<Opts> for Opt {
|
||||
fn configure(self, opts: &mut Opts) {
|
||||
impl rust_macro_shared::Configure<Builder> for Opt {
|
||||
fn configure(self, builder: &mut Builder) {
|
||||
match self {
|
||||
Opt::Unchecked(val) => opts.unchecked = val,
|
||||
Opt::NoStd(val) => opts.no_std = val,
|
||||
Opt::Unchecked(val) => builder.unchecked = val,
|
||||
Opt::NoStd(val) => builder.no_std = val,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
use proc_macro::TokenStream;
|
||||
use syn::parse::{Parse, ParseStream, Result};
|
||||
use syn::Token;
|
||||
use tauri_bindgen_gen_host::Opts;
|
||||
use tauri_bindgen_gen_host::Builder;
|
||||
|
||||
#[proc_macro]
|
||||
pub fn generate(input: TokenStream) -> TokenStream {
|
||||
rust_macro_shared::generate::<Opt, Opts, _>(input, |opts, interface| {
|
||||
Box::new(opts.build(interface))
|
||||
})
|
||||
rust_macro_shared::generate::<Opt, Builder>(input)
|
||||
}
|
||||
|
||||
mod kw {
|
||||
@@ -37,11 +35,11 @@ impl Parse for Opt {
|
||||
}
|
||||
}
|
||||
|
||||
impl rust_macro_shared::Configure<Opts> for Opt {
|
||||
fn configure(self, opts: &mut Opts) {
|
||||
impl rust_macro_shared::Configure<Builder> for Opt {
|
||||
fn configure(self, builder: &mut Builder) {
|
||||
match self {
|
||||
Opt::Async(val) => opts.async_ = val,
|
||||
Opt::Tracing(val) => opts.tracing = val,
|
||||
Opt::Async(val) => builder.async_ = val,
|
||||
Opt::Tracing(val) => builder.tracing = val,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,4 +3,4 @@ pub use tauri_bindgen_host_macro::*;
|
||||
#[doc(hidden)]
|
||||
pub use {anyhow, async_trait::async_trait, bitflags, ipc_router_wip, tauri, tracing};
|
||||
|
||||
pub use tauri_bindgen_abi;
|
||||
pub use tauri_bindgen_abi;
|
||||
@@ -8,22 +8,17 @@ use std::path::PathBuf;
|
||||
use syn::parse::{Error, Parse, ParseStream, Result};
|
||||
use syn::punctuated::Punctuated;
|
||||
use syn::{token, Token};
|
||||
use tauri_bindgen_core::Generate;
|
||||
use wit_parser::Interface;
|
||||
use tauri_bindgen_core::GeneratorBuilder;
|
||||
|
||||
/// # Panics
|
||||
///
|
||||
/// TODO
|
||||
pub fn generate<F, O, G>(input: TokenStream, mkgen: G) -> TokenStream
|
||||
pub fn generate<F, B>(input: TokenStream) -> TokenStream
|
||||
where
|
||||
F: Parse + Configure<O>,
|
||||
O: Default,
|
||||
G: FnOnce(O, Interface) -> Box<dyn Generate>,
|
||||
F: Parse + Configure<B>,
|
||||
B: GeneratorBuilder + Default,
|
||||
{
|
||||
let input = syn::parse_macro_input!(input as Opts<F, O>);
|
||||
let input = syn::parse_macro_input!(input as Opts<F, B>);
|
||||
let iface = wit_parser::parse_file(&input.file, |t| input.skip.contains(t)).unwrap();
|
||||
|
||||
let gen = mkgen(input.opts, iface);
|
||||
let gen = input.builder.build(iface);
|
||||
let mut tokens = gen.to_tokens();
|
||||
|
||||
let filepath = input.file.to_string_lossy();
|
||||
@@ -37,7 +32,7 @@ pub trait Configure<O> {
|
||||
}
|
||||
|
||||
struct Opts<F, O> {
|
||||
opts: O,
|
||||
builder: O,
|
||||
skip: HashSet<String>,
|
||||
file: PathBuf,
|
||||
_marker: marker::PhantomData<F>,
|
||||
@@ -58,7 +53,7 @@ where
|
||||
|
||||
let mut file: Option<PathBuf> = None;
|
||||
let mut ret = Opts {
|
||||
opts: O::default(),
|
||||
builder: O::default(),
|
||||
file: PathBuf::new(),
|
||||
skip: HashSet::new(),
|
||||
_marker: marker::PhantomData,
|
||||
@@ -83,7 +78,7 @@ where
|
||||
ConfigField::Skip(skip) => {
|
||||
ret.skip = skip.iter().map(syn::LitStr::value).collect();
|
||||
}
|
||||
ConfigField::Other(other) => other.configure(&mut ret.opts),
|
||||
ConfigField::Other(other) => other.configure(&mut ret.builder),
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -558,7 +558,6 @@ mod test {
|
||||
use super::*;
|
||||
use logos::Lexer;
|
||||
use parse::FromTokens;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn interface_() -> Result<()> {
|
||||
|
||||
Reference in New Issue
Block a user