tslink 0.4.2

Creates typescript definitions based on rust code
Documentation
use crate::{error::E, nature::Nature};
use proc_macro2::TokenStream;

pub trait TypeTokenStream {
    fn type_token_stream(&self) -> Result<TokenStream, E>;
}

impl TypeTokenStream for Nature {
    fn type_token_stream(&self) -> Result<TokenStream, E> {
        match self {
            Nature::Composite(ty) => ty.type_token_stream(),
            Nature::Primitive(ty) => ty.type_token_stream(),
            Nature::Referred(ty) => ty.type_token_stream(),
        }
    }
}
pub trait TypeAsString {
    fn type_as_string(&self) -> Result<String, E>;
}

impl TypeAsString for Nature {
    fn type_as_string(&self) -> Result<String, E> {
        match self {
            Nature::Composite(ty) => ty.type_as_string(),
            Nature::Primitive(ty) => ty.type_as_string(),
            Nature::Referred(ty) => ty.type_as_string(),
        }
    }
}

pub trait VariableTokenStream {
    fn variable_token_stream(&self, var_name: &str, err: Option<&Nature>)
        -> Result<TokenStream, E>;
}

impl VariableTokenStream for Nature {
    fn variable_token_stream(
        &self,
        var_name: &str,
        err: Option<&Nature>,
    ) -> Result<TokenStream, E> {
        match self {
            Nature::Composite(v) => v.variable_token_stream(var_name, err),
            Nature::Primitive(v) => v.variable_token_stream(var_name, err),
            Nature::Referred(v) => v.variable_token_stream(var_name, err),
        }
    }
}