ts-rs-macros 12.0.0

derive macro for ts-rs
Documentation
use quote::quote;
use syn::{Expr, Result, Type};

use crate::{
    attr::{ContainerAttr, EnumAttr, StructAttr},
    deps::Dependencies,
    DerivedTS,
};

pub(crate) fn type_as_struct(
    attr: &StructAttr,
    ts_name: Expr,
    type_as: &Type,
) -> Result<DerivedTS> {
    let crate_rename = attr.crate_rename();

    let mut dependencies = Dependencies::new(crate_rename.clone());
    dependencies.append_from(type_as);

    Ok(DerivedTS {
        crate_rename: crate_rename.clone(),
        inline: quote!(<#type_as as #crate_rename::TS>::inline(cfg)),
        inline_flattened: None,
        docs: attr.docs.clone(),
        dependencies,
        export: attr.export,
        export_to: attr.export_to.clone(),
        ts_name,
        concrete: attr.concrete.clone(),
        bound: attr.bound.clone(),
        ts_enum: None,
        is_enum: quote!(<#type_as as #crate_rename::TS>::IS_ENUM),
    })
}

pub(crate) fn type_as_enum(attr: &EnumAttr, ts_name: Expr, type_as: &Type) -> Result<DerivedTS> {
    let crate_rename = attr.crate_rename();

    let mut dependencies = Dependencies::new(crate_rename.clone());
    dependencies.append_from(type_as);

    Ok(DerivedTS {
        crate_rename: crate_rename.clone(),
        inline: quote!(<#type_as as #crate_rename::TS>::inline(cfg)),
        inline_flattened: None,
        docs: attr.docs.clone(),
        dependencies,
        export: attr.export,
        export_to: attr.export_to.clone(),
        ts_name,
        concrete: attr.concrete.clone(),
        bound: attr.bound.clone(),
        ts_enum: None,
        is_enum: quote!(<#type_as as #crate_rename::TS>::IS_ENUM),
    })
}