ribir_macros 0.4.0-alpha.41

A non-intrusive declarative GUI framework, to build modern native/wasm cross-platform applications.
Documentation
use syn::{Data, spanned::Spanned};

pub fn data_struct_unwrap<'a>(
  data: &'a mut syn::Data, derive_trait: &'static str,
) -> syn::Result<&'a mut syn::DataStruct> {
  match data {
    Data::Struct(stt) => Ok(stt),
    Data::Enum(e) => {
      let err_str = format!("`{derive_trait}` not support for Enum");
      Err(syn::Error::new(e.enum_token.span(), err_str))
    }
    Data::Union(u) => {
      let err_str = format!("`{derive_trait}` not support for Union");
      Err(syn::Error::new(u.union_token.span(), err_str))
    }
  }
}

pub fn doc_attr(field: &syn::Field) -> Option<&syn::Attribute> {
  field
    .attrs
    .iter()
    .find(|attr| matches!(&attr.meta, syn::Meta::NameValue(nv) if nv.path.is_ident("doc")))
}

pub fn declare_init_method(member: &syn::Ident) -> syn::Ident {
  if member.to_string().starts_with("on_") {
    member.clone()
  } else {
    syn::Ident::new(&format!("with_{}", member), member.span())
  }
}