tslink 0.4.2

Creates typescript definitions based on rust code
Documentation
use crate::{
    error::E,
    nature::{Nature, OriginType, TypeAsString, TypeTokenStream, VariableTokenStream},
};
use proc_macro2::TokenStream;
use quote::{format_ident, quote};

#[derive(Clone, Debug)]
pub enum Primitive {
    Number(OriginType),
    BigInt(OriginType),
    String(OriginType),
    Boolean(OriginType),
}

impl TypeTokenStream for Primitive {
    fn type_token_stream(&self) -> Result<TokenStream, E> {
        match self {
            Self::Number(ty) => ty,
            Self::BigInt(ty) => ty,
            Self::String(ty) => ty,
            Self::Boolean(ty) => ty,
        }
        .type_token_stream()
    }
}

impl TypeAsString for Primitive {
    fn type_as_string(&self) -> Result<String, E> {
        match self {
            Self::Number(ty) => ty,
            Self::BigInt(ty) => ty,
            Self::String(ty) => ty,
            Self::Boolean(ty) => ty,
        }
        .type_as_string()
    }
}

impl VariableTokenStream for Primitive {
    fn variable_token_stream(
        &self,
        var_name: &str,
        _err: Option<&Nature>,
    ) -> Result<TokenStream, E> {
        let var_name = format_ident!("{}", var_name);
        Ok(quote! {
            #var_name
        })
    }
}