use unsynn::*;
pub type VerbatimUntil<C> = Many<Cons<Except<C>, AngleTokenTree>>;
keyword! {
pub KPath = "path";
pub KName = "name";
pub KCfgAttr = "cfg_attr";
pub KFn = "fn";
pub KPub = "pub";
pub KAsync = "async";
pub KUnsafe = "unsafe";
pub KExtern = "extern";
pub KConst = "const";
pub KWhere = "where";
pub KImpl = "impl";
pub KFor = "for";
pub KMod = "mod";
pub KTrait = "trait";
pub KCrate = "crate";
pub KSuper = "super";
pub KSelf = "self";
pub KMut = "mut";
pub KEnum = "enum";
pub KStruct = "struct";
pub KType = "type";
pub KStatic = "static";
}
operator! {
pub Eq = "=";
pub And = "&";
}
unsynn! {
#[derive(Clone)]
pub struct AngleTokenTree(
pub Either<Cons<Lt, Vec<Cons<Except<Gt>, AngleTokenTree>>, Gt>, TokenTree>,
);
pub struct SyncDocInner {
pub args: Option<CommaDelimitedVec<SyncDocArg>>,
}
pub enum SyncDocArg {
Path(PathArg),
Name(NameArg),
CfgAttr(CfgAttrArg),
}
pub struct PathArg {
pub _path: KPath,
pub _eq: Eq,
pub value: LiteralString,
}
pub struct NameArg {
pub _name: KName,
pub _eq: Eq,
pub value: LiteralString,
}
pub struct CfgAttrArg {
pub _cfg_attr: KCfgAttr,
pub _eq: Eq,
pub value: LiteralString,
}
#[derive(Clone)]
pub struct FnSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub const_kw: Option<KConst>,
pub async_kw: Option<KAsync>,
pub unsafe_kw: Option<KUnsafe>,
pub extern_kw: Option<ExternSpec>,
pub _fn: KFn,
pub name: Ident,
pub generics: Option<Generics>,
pub params: ParenthesisGroupContaining<Option<CommaDelimitedVec<FnParam>>>,
pub return_type: Option<ReturnTypeFn>,
pub where_clause: Option<WhereClauses>,
pub body: BraceGroup,
}
#[derive(Clone)]
pub struct Attribute {
pub _hash: Pound,
pub content: BracketGroup,
}
#[derive(Clone)]
pub struct InnerAttribute {
pub _hash: Pound,
pub _bang: Bang,
pub content: BracketGroup,
}
pub enum AnyAttribute {
Inner(InnerAttribute),
Outer(Attribute),
}
#[derive(Clone)]
pub enum ExternSpec {
WithAbi(ExternWithAbi),
Bare(KExtern),
}
#[derive(Clone)]
pub struct ExternWithAbi {
pub _extern: KExtern,
pub abi: LiteralString,
}
#[derive(Clone)]
pub enum Visibility {
Restricted(RestrictedVis),
Public(KPub),
}
#[derive(Clone)]
pub struct RestrictedVis {
pub _pub: KPub,
pub restriction: ParenthesisGroup,
}
#[derive(Clone)]
pub struct Generics {
pub _lt: Lt,
pub content: Many<Cons<Except<Gt>, TokenTree>>,
pub _gt: Gt,
}
#[derive(Clone)]
pub struct ReturnTypeTrait {
pub _arrow: RArrow,
pub return_type: VerbatimUntil<Either<BraceGroup, Semicolon>>,
}
#[derive(Clone)]
pub struct ReturnTypeFn {
pub _arrow: RArrow,
pub return_type: VerbatimUntil<BraceGroup>,
}
#[derive(Clone)]
pub struct WhereClause {
pub _pred: VerbatimUntil<Colon>,
pub _colon: Colon,
pub bounds: VerbatimUntil<Either<Comma, Semicolon, BraceGroup>>,
}
#[derive(Clone)]
pub struct WhereClauses {
pub _kw_where: KWhere,
pub clauses: CommaDelimitedVec<WhereClausePredicate>,
}
#[derive(Clone)]
pub struct WhereClausePredicate {
pub pred: VerbatimUntil<Colon>,
pub _colon: Colon,
pub bounds: VerbatimUntil<Either<Comma, BraceGroup>>,
}
#[derive(Clone)]
pub enum ModuleItem {
TraitMethod(TraitMethodSig),
Function(FnSig),
ImplBlock(ImplBlockSig),
Module(ModuleSig),
Trait(TraitSig),
Enum(EnumSig),
Struct(StructSig),
TypeAlias(TypeAliasSig),
Const(ConstSig),
Static(StaticSig),
Other(TokenTree),
}
#[derive(Clone)]
pub struct ImplBlockSig {
pub attributes: Option<Many<Attribute>>,
pub _impl: KImpl,
pub generics: Option<Generics>,
pub target_type: Many<Cons<Except<Either<KFor, BraceGroup>>, TokenTree>>,
pub for_trait: Option<Cons<KFor, Many<Cons<Except<BraceGroup>, TokenTree>>>>,
pub where_clause: Option<WhereClauses>,
pub items: BraceGroupContaining<ModuleContent>,
}
#[derive(Clone)]
pub struct ModuleSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub _mod: KMod,
pub name: Ident,
pub items: BraceGroupContaining<ModuleContent>,
}
#[derive(Clone)]
pub struct TraitSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub unsafe_kw: Option<KUnsafe>,
pub _trait: KTrait,
pub name: Ident,
pub generics: Option<Generics>,
pub bounds: Option<Cons<Colon, Many<Cons<Except<Either<KWhere, BraceGroup>>, TokenTree>>>>,
pub where_clause: Option<WhereClauses>,
pub items: BraceGroupContaining<ModuleContent>,
}
#[derive(Clone)]
pub struct TraitMethodSig {
pub attributes: Option<Many<Attribute>>,
pub const_kw: Option<KConst>,
pub async_kw: Option<KAsync>,
pub unsafe_kw: Option<KUnsafe>,
pub extern_kw: Option<ExternSpec>,
pub _fn: KFn,
pub name: Ident,
pub generics: Option<Generics>,
pub params: ParenthesisGroupContaining<Option<CommaDelimitedVec<FnParam>>>,
pub return_type: Option<ReturnTypeTrait>,
pub where_clause: Option<WhereClauses>,
pub _semi: Semicolon,
}
#[derive(Clone)]
pub struct EnumSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub _enum: KEnum,
pub name: Ident,
pub generics: Option<Generics>,
pub where_clause: Option<WhereClauses>,
pub variants: BraceGroupContaining<Option<CommaDelimitedVec<EnumVariant>>>,
}
#[derive(Clone)]
pub struct StructSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub _struct: KStruct,
pub name: Ident,
pub generics: Option<Generics>,
pub where_clause: Option<WhereClauses>,
pub body: StructBody,
}
#[derive(Clone)]
pub enum StructBody {
Named(BraceGroupContaining<Option<CommaDelimitedVec<StructField>>>),
Tuple(Cons<ParenthesisGroup, Semicolon>),
Unit(Semicolon),
}
#[derive(Clone)]
pub struct StructField {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub name: Ident,
pub _colon: Colon,
pub field_type: VerbatimUntil<Either<Comma, BraceGroup>>,
}
#[derive(Clone)]
pub struct TypeAliasSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub _type: KType,
pub name: Ident,
pub generics: Option<Generics>,
pub _eq: Eq,
pub target: VerbatimUntil<Semicolon>,
pub _semi: Semicolon,
}
#[derive(Clone)]
pub struct ConstSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub _const: KConst,
pub name: Ident,
pub _colon: Colon,
pub const_type: VerbatimUntil<Eq>,
pub _eq: Eq,
pub value: VerbatimUntil<Semicolon>,
pub _semi: Semicolon,
}
#[derive(Clone)]
pub struct StaticSig {
pub attributes: Option<Many<Attribute>>,
pub visibility: Option<Visibility>,
pub _static: KStatic,
pub mut_kw: Option<KMut>,
pub name: Ident,
pub _colon: Colon,
pub static_type: VerbatimUntil<Eq>,
pub _eq: Eq,
pub value: VerbatimUntil<Semicolon>,
pub _semi: Semicolon,
}
#[derive(Clone)]
pub struct EnumVariant {
pub attributes: Option<Many<Attribute>>,
pub name: Ident,
pub data: Option<EnumVariantData>,
}
#[derive(Clone)]
pub enum EnumVariantData {
Tuple(ParenthesisGroup),
Struct(BraceGroupContaining<Option<CommaDelimitedVec<StructField>>>),
Discriminant(Cons<Eq, VerbatimUntil<Either<Comma, BraceGroup>>>),
}
#[derive(Clone)]
pub struct ModuleContent {
pub inner_attrs: Option<Many<InnerAttribute>>,
pub items: Many<ModuleItem>,
}
#[derive(Clone)]
pub enum FnParam {
SelfParam(SelfParam),
Named(NamedParam),
Pattern(PatternParam),
}
#[derive(Clone)]
pub enum SelfParam {
Value(KSelf),
Ref(Cons<And, KSelf>),
RefMut(Cons<And, Cons<KMut, KSelf>>),
Mut(Cons<KMut, KSelf>),
}
#[derive(Clone)]
pub struct NamedParam {
pub mut_kw: Option<KMut>,
pub name: Ident,
pub _colon: Colon,
pub param_type: VerbatimUntil<Comma>,
}
#[derive(Clone)]
pub struct PatternParam {
pub mut_kw: Option<KMut>,
pub pattern: Pattern,
pub _colon: Colon,
pub param_type: VerbatimUntil<Either<Comma, ParenthesisGroup>>,
}
#[derive(Clone)]
pub enum Pattern {
Ident(Ident),
Tuple(TuplePattern),
Other(VerbatimUntil<Colon>),
}
#[derive(Clone)]
pub struct TuplePattern {
pub fields: ParenthesisGroupContaining<Option<CommaDelimitedVec<PatternField>>>,
}
#[derive(Clone)]
pub enum PatternField {
Ident(Ident),
Nested(Pattern),
}
}
impl quote::ToTokens for FnSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
if let Some(const_kw) = &self.const_kw {
unsynn::ToTokens::to_tokens(const_kw, tokens);
}
if let Some(async_kw) = &self.async_kw {
unsynn::ToTokens::to_tokens(async_kw, tokens);
}
if let Some(unsafe_kw) = &self.unsafe_kw {
unsynn::ToTokens::to_tokens(unsafe_kw, tokens);
}
if let Some(extern_kw) = &self.extern_kw {
unsynn::ToTokens::to_tokens(extern_kw, tokens);
}
unsynn::ToTokens::to_tokens(&self._fn, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
unsynn::ToTokens::to_tokens(&self.params, tokens);
if let Some(ret_type) = &self.return_type {
unsynn::ToTokens::to_tokens(ret_type, tokens);
}
if let Some(where_clause) = &self.where_clause {
unsynn::ToTokens::to_tokens(where_clause, tokens);
}
unsynn::ToTokens::to_tokens(&self.body, tokens);
}
}
impl quote::ToTokens for TraitMethodSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(const_kw) = &self.const_kw {
unsynn::ToTokens::to_tokens(const_kw, tokens);
}
if let Some(async_kw) = &self.async_kw {
unsynn::ToTokens::to_tokens(async_kw, tokens);
}
if let Some(unsafe_kw) = &self.unsafe_kw {
unsynn::ToTokens::to_tokens(unsafe_kw, tokens);
}
if let Some(extern_kw) = &self.extern_kw {
unsynn::ToTokens::to_tokens(extern_kw, tokens);
}
unsynn::ToTokens::to_tokens(&self._fn, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
unsynn::ToTokens::to_tokens(&self.params, tokens);
if let Some(ret_type) = &self.return_type {
unsynn::ToTokens::to_tokens(ret_type, tokens);
}
if let Some(where_clause) = &self.where_clause {
unsynn::ToTokens::to_tokens(where_clause, tokens);
}
unsynn::ToTokens::to_tokens(&self._semi, tokens);
}
}
impl quote::ToTokens for FnParam {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
FnParam::SelfParam(self_param) => quote::ToTokens::to_tokens(self_param, tokens),
FnParam::Named(named) => quote::ToTokens::to_tokens(named, tokens),
FnParam::Pattern(pattern) => quote::ToTokens::to_tokens(pattern, tokens),
}
}
}
impl quote::ToTokens for SelfParam {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
SelfParam::Value(self_kw) => unsynn::ToTokens::to_tokens(self_kw, tokens),
SelfParam::Ref(ref_self) => unsynn::ToTokens::to_tokens(ref_self, tokens),
SelfParam::RefMut(ref_mut_self) => unsynn::ToTokens::to_tokens(ref_mut_self, tokens),
SelfParam::Mut(mut_self) => unsynn::ToTokens::to_tokens(mut_self, tokens),
}
}
}
impl quote::ToTokens for NamedParam {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(mut_kw) = &self.mut_kw {
unsynn::ToTokens::to_tokens(mut_kw, tokens);
}
quote::ToTokens::to_tokens(&self.name, tokens);
unsynn::ToTokens::to_tokens(&self._colon, tokens);
unsynn::ToTokens::to_tokens(&self.param_type, tokens);
}
}
impl quote::ToTokens for PatternParam {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(mut_kw) = &self.mut_kw {
unsynn::ToTokens::to_tokens(mut_kw, tokens);
}
unsynn::ToTokens::to_tokens(&self.pattern, tokens);
unsynn::ToTokens::to_tokens(&self._colon, tokens);
unsynn::ToTokens::to_tokens(&self.param_type, tokens);
}
}
impl quote::ToTokens for Pattern {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
Pattern::Tuple(tuple) => quote::ToTokens::to_tokens(tuple, tokens),
Pattern::Ident(ident) => quote::ToTokens::to_tokens(ident, tokens),
Pattern::Other(other) => unsynn::ToTokens::to_tokens(other, tokens),
}
}
}
impl quote::ToTokens for TuplePattern {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self.fields, tokens);
}
}
impl quote::ToTokens for PatternField {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
PatternField::Ident(ident) => quote::ToTokens::to_tokens(ident, tokens),
PatternField::Nested(pattern) => quote::ToTokens::to_tokens(pattern, tokens),
}
}
}
impl quote::ToTokens for Visibility {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
Visibility::Public(pub_kw) => unsynn::ToTokens::to_tokens(pub_kw, tokens),
Visibility::Restricted(restricted) => unsynn::ToTokens::to_tokens(restricted, tokens),
}
}
}
impl quote::ToTokens for ExternSpec {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
ExternSpec::WithAbi(with_abi) => unsynn::ToTokens::to_tokens(with_abi, tokens),
ExternSpec::Bare(extern_kw) => unsynn::ToTokens::to_tokens(extern_kw, tokens),
}
}
}
impl quote::ToTokens for ReturnTypeTrait {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._arrow, tokens);
unsynn::ToTokens::to_tokens(&self.return_type, tokens);
}
}
impl quote::ToTokens for ReturnTypeFn {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._arrow, tokens);
unsynn::ToTokens::to_tokens(&self.return_type, tokens);
}
}
impl quote::ToTokens for Generics {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._lt, tokens);
unsynn::ToTokens::to_tokens(&self.content, tokens);
unsynn::ToTokens::to_tokens(&self._gt, tokens);
}
}
impl quote::ToTokens for WhereClause {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._pred, tokens);
unsynn::ToTokens::to_tokens(&self._colon, tokens);
unsynn::ToTokens::to_tokens(&self.bounds, tokens);
}
}
impl quote::ToTokens for WhereClauses {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._kw_where, tokens);
unsynn::ToTokens::to_tokens(&self.clauses, tokens);
}
}
impl quote::ToTokens for Attribute {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._hash, tokens);
unsynn::ToTokens::to_tokens(&self.content, tokens);
}
}
impl quote::ToTokens for InnerAttribute {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._hash, tokens);
unsynn::ToTokens::to_tokens(&self._bang, tokens);
unsynn::ToTokens::to_tokens(&self.content, tokens);
}
}
impl quote::ToTokens for AnyAttribute {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
AnyAttribute::Inner(inner) => quote::ToTokens::to_tokens(inner, tokens),
AnyAttribute::Outer(outer) => quote::ToTokens::to_tokens(outer, tokens),
}
}
}
impl quote::ToTokens for RestrictedVis {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._pub, tokens);
unsynn::ToTokens::to_tokens(&self.restriction, tokens);
}
}
impl quote::ToTokens for ExternWithAbi {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
unsynn::ToTokens::to_tokens(&self._extern, tokens);
unsynn::ToTokens::to_tokens(&self.abi, tokens);
}
}
impl quote::ToTokens for ModuleItem {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
ModuleItem::TraitMethod(method) => quote::ToTokens::to_tokens(method, tokens),
ModuleItem::Function(func) => quote::ToTokens::to_tokens(func, tokens),
ModuleItem::ImplBlock(impl_block) => quote::ToTokens::to_tokens(impl_block, tokens),
ModuleItem::Module(module) => quote::ToTokens::to_tokens(module, tokens),
ModuleItem::Trait(trait_def) => quote::ToTokens::to_tokens(trait_def, tokens),
ModuleItem::Enum(enum_sig) => quote::ToTokens::to_tokens(enum_sig, tokens),
ModuleItem::Struct(struct_sig) => quote::ToTokens::to_tokens(struct_sig, tokens),
ModuleItem::TypeAlias(type_alias) => quote::ToTokens::to_tokens(type_alias, tokens),
ModuleItem::Const(const_sig) => quote::ToTokens::to_tokens(const_sig, tokens),
ModuleItem::Static(static_sig) => quote::ToTokens::to_tokens(static_sig, tokens),
ModuleItem::Other(token_tree) => unsynn::ToTokens::to_tokens(token_tree, tokens),
}
}
}
impl quote::ToTokens for ImplBlockSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
unsynn::ToTokens::to_tokens(&self._impl, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
unsynn::ToTokens::to_tokens(&self.target_type, tokens);
if let Some(for_trait) = &self.for_trait {
unsynn::ToTokens::to_tokens(for_trait, tokens);
}
if let Some(where_clause) = &self.where_clause {
unsynn::ToTokens::to_tokens(where_clause, tokens);
}
unsynn::ToTokens::to_tokens(&self.items, tokens);
}
}
impl quote::ToTokens for ModuleSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
unsynn::ToTokens::to_tokens(&self._mod, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
unsynn::ToTokens::to_tokens(&self.items, tokens);
}
}
impl quote::ToTokens for TraitSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
if let Some(unsafe_kw) = &self.unsafe_kw {
unsynn::ToTokens::to_tokens(unsafe_kw, tokens);
}
unsynn::ToTokens::to_tokens(&self._trait, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
if let Some(bounds) = &self.bounds {
unsynn::ToTokens::to_tokens(bounds, tokens);
}
if let Some(where_clause) = &self.where_clause {
unsynn::ToTokens::to_tokens(where_clause, tokens);
}
unsynn::ToTokens::to_tokens(&self.items, tokens);
}
}
impl quote::ToTokens for ModuleContent {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(inner_attrs) = &self.inner_attrs {
for attr_delimited in &inner_attrs.0 {
quote::ToTokens::to_tokens(&attr_delimited.value, tokens);
}
}
unsynn::ToTokens::to_tokens(&self.items, tokens);
}
}
impl quote::ToTokens for EnumSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
unsynn::ToTokens::to_tokens(&self._enum, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
if let Some(where_clause) = &self.where_clause {
unsynn::ToTokens::to_tokens(where_clause, tokens);
}
unsynn::ToTokens::to_tokens(&self.variants, tokens);
}
}
impl quote::ToTokens for StructSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
unsynn::ToTokens::to_tokens(&self._struct, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
if let Some(where_clause) = &self.where_clause {
unsynn::ToTokens::to_tokens(where_clause, tokens);
}
quote::ToTokens::to_tokens(&self.body, tokens);
}
}
impl quote::ToTokens for StructBody {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
StructBody::Named(fields) => unsynn::ToTokens::to_tokens(fields, tokens),
StructBody::Tuple(tuple) => unsynn::ToTokens::to_tokens(tuple, tokens),
StructBody::Unit(semi) => unsynn::ToTokens::to_tokens(semi, tokens),
}
}
}
impl quote::ToTokens for StructField {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
quote::ToTokens::to_tokens(&self.name, tokens);
unsynn::ToTokens::to_tokens(&self._colon, tokens);
unsynn::ToTokens::to_tokens(&self.field_type, tokens);
}
}
impl quote::ToTokens for TypeAliasSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
unsynn::ToTokens::to_tokens(&self._type, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(generics) = &self.generics {
unsynn::ToTokens::to_tokens(generics, tokens);
}
unsynn::ToTokens::to_tokens(&self._eq, tokens);
unsynn::ToTokens::to_tokens(&self.target, tokens);
unsynn::ToTokens::to_tokens(&self._semi, tokens);
}
}
impl quote::ToTokens for ConstSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
unsynn::ToTokens::to_tokens(&self._const, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
unsynn::ToTokens::to_tokens(&self._colon, tokens);
unsynn::ToTokens::to_tokens(&self.const_type, tokens);
unsynn::ToTokens::to_tokens(&self._eq, tokens);
unsynn::ToTokens::to_tokens(&self.value, tokens);
unsynn::ToTokens::to_tokens(&self._semi, tokens);
}
}
impl quote::ToTokens for StaticSig {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
if let Some(vis) = &self.visibility {
quote::ToTokens::to_tokens(vis, tokens);
}
if let Some(mut_kw) = &self.mut_kw {
unsynn::ToTokens::to_tokens(mut_kw, tokens);
}
unsynn::ToTokens::to_tokens(&self._static, tokens);
quote::ToTokens::to_tokens(&self.name, tokens);
unsynn::ToTokens::to_tokens(&self._colon, tokens);
unsynn::ToTokens::to_tokens(&self.static_type, tokens);
unsynn::ToTokens::to_tokens(&self._eq, tokens);
unsynn::ToTokens::to_tokens(&self.value, tokens);
unsynn::ToTokens::to_tokens(&self._semi, tokens);
}
}
impl quote::ToTokens for EnumVariant {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
if let Some(attrs) = &self.attributes {
for attr in &attrs.0 {
unsynn::ToTokens::to_tokens(attr, tokens);
}
}
quote::ToTokens::to_tokens(&self.name, tokens);
if let Some(data) = &self.data {
quote::ToTokens::to_tokens(data, tokens);
}
}
}
impl quote::ToTokens for EnumVariantData {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
match self {
EnumVariantData::Tuple(paren) => unsynn::ToTokens::to_tokens(paren, tokens),
EnumVariantData::Struct(brace) => unsynn::ToTokens::to_tokens(brace, tokens),
EnumVariantData::Discriminant(disc) => unsynn::ToTokens::to_tokens(disc, tokens),
}
}
}
#[cfg(test)]
#[path = "tests/parse.rs"]
mod tests;