utility_macros_derive/
lib.rs

1use _um::{
2    derive::{
3        partial::partial_impl, readonly::readonly_impl, record::record_impl,
4        required::required_impl,
5    },
6    union::union_impl::union_impl,
7};
8use proc_macro::TokenStream;
9use syn::{parse_macro_input, DeriveInput};
10
11// Derives the `Partial` trait for a struct.
12#[proc_macro_derive(Partial, attributes(partial))]
13pub fn derive_partial(input: TokenStream) -> TokenStream {
14    let input = parse_macro_input!(input as DeriveInput);
15    partial_impl(input).into()
16}
17
18/// Derives the `Required` trait for a struct.
19#[proc_macro_derive(Required, attributes(required))]
20pub fn derive_required(input: TokenStream) -> TokenStream {
21    let input = parse_macro_input!(input as DeriveInput);
22    required_impl(input).into()
23}
24
25/// Derives the `Readonly` trait for a struct.
26#[proc_macro_derive(Readonly, attributes(readonly))]
27pub fn derive_readonly(input: TokenStream) -> TokenStream {
28    let input = parse_macro_input!(input as DeriveInput);
29    readonly_impl(input).into()
30}
31
32/// Derives the `Record` trait for a struct.
33#[proc_macro_derive(Record, attributes(record))]
34pub fn derive_record(input: TokenStream) -> TokenStream {
35    let input = parse_macro_input!(input as DeriveInput);
36    record_impl(input).into()
37}
38
39/// Create a string union inside me.
40#[proc_macro]
41pub fn union(item: TokenStream) -> TokenStream {
42    union_impl(item.into()).into()
43}