infallible-builder-macro 0.0.1

Macro crate for infallible-builder. Do not use this crate directly.
Documentation

use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn Builder(_attrs: TokenStream, item: TokenStream) -> TokenStream {
    let item = parse_macro_input!(item as DeriveInput);
    let name = item.ident.clone();
    let builder_name = quote::format_ident!("{name}Builder");

    TokenStream::from(quote! {
        #[derive(infallible_builder::derive_builder::Builder)]
        #[builder(
            default,
            pattern = "owned",
            crate = "infallible_builder::derive_builder",
            build_fn(private, name = "build_fallible", error = "std::convert::Infallible"),
            setter(into, strip_option),
        )]
        #item

        impl #name {
            pub fn builder() -> #builder_name {
                #builder_name::default()
            }
        }

        impl #builder_name {
            pub fn build(self) -> #name {
                use infallible_builder::UnwrapInfallible;
                self.build_fallible().unwrap_infallible()
            }
        }
    })
}