stac-derive 0.3.0

Proc macros for deriving STAC traits. Should usually not be used directly.
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn::{DeriveInput, parse_macro_input};

#[proc_macro_derive(SelfHref)]
pub fn self_href_derive(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input as DeriveInput);
    let name = input.ident;
    let expanded = quote! {
        impl ::stac::SelfHref for #name {
            fn self_href(&self) -> Option<&str> {
                self.self_href.as_deref()
            }
            fn self_href_mut(&mut self) -> &mut Option<String> {
                &mut self.self_href
            }
        }
    };
    TokenStream::from(expanded)
}

#[proc_macro_derive(Links)]
pub fn links_derive(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input as DeriveInput);
    let name = input.ident;
    let expanded = quote! {
        impl ::stac::Links for #name {
            fn links(&self) -> &[::stac::Link] {
                &self.links
            }
            fn links_mut(&mut self) -> &mut Vec<::stac::Link> {
                &mut self.links
            }
        }
    };
    TokenStream::from(expanded)
}

#[proc_macro_derive(Migrate)]
pub fn migrate_derive(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input as DeriveInput);
    let name = input.ident;
    let expanded = quote! {
        impl ::stac::Migrate for #name {}
    };
    TokenStream::from(expanded)
}

#[proc_macro_derive(Fields)]
pub fn fields_derive(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input as DeriveInput);
    let name = input.ident;
    let expanded = quote! {
        impl ::stac::Fields for #name {
            fn fields(&self) -> &serde_json::Map<String, serde_json::Value> {
                &self.additional_fields
            }
            fn fields_mut(&mut self) -> &mut serde_json::Map<String, Value> {
                &mut self.additional_fields
            }
        }
    };
    TokenStream::from(expanded)
}