1
0
Fork 0
mirror of https://forgejo.ellis.link/continuwuation/continuwuity.git synced 2025-07-28 02:38:30 +00:00
continuwuity/src/macros/implement.rs
strawberry 77e0b76408
apply new rustfmt.toml changes, fix some clippy lints
Signed-off-by: strawberry <strawberry@puppygock.gay>
2024-12-15 01:00:41 -05:00

35 lines
849 B
Rust

use proc_macro::{Span, TokenStream};
use quote::quote;
use syn::{Error, ItemFn, Meta, Path};
use utils::get_named_generics;
use crate::{utils, Result};
pub(super) fn implement(item: ItemFn, args: &[Meta]) -> Result<TokenStream> {
let generics = get_named_generics(args, "generics")?;
let receiver = get_receiver(args)?;
let params = get_named_generics(args, "params")?;
let input = item;
let out = quote! {
impl #generics #receiver #params {
#input
}
};
Ok(out.into())
}
fn get_receiver(args: &[Meta]) -> Result<Path> {
let receiver = &args.first().ok_or_else(|| {
Error::new(Span::call_site().into(), "Missing required argument to receiver")
})?;
let Meta::Path(receiver) = receiver else {
return Err(Error::new(
Span::call_site().into(),
"First argument is not path to receiver",
));
};
Ok(receiver.clone())
}