macro cleanup

This commit is contained in:
Jonas Kruckenberg
2023-03-08 14:33:35 +01:00
parent 498a4b0e0b
commit 4e0660201f
5 changed files with 22 additions and 30 deletions

View File

@@ -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,
}
}
}

View File

@@ -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,
}
}
}

View File

@@ -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;

View File

@@ -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 {

View File

@@ -558,7 +558,6 @@ mod test {
use super::*;
use logos::Lexer;
use parse::FromTokens;
use pretty_assertions::assert_eq;
#[test]
fn interface_() -> Result<()> {