1mod opposed;
2mod wrapped;
3
4use proc_macro2::Ident;
5use syn::__private::TokenStream2;
6use syn::{Attribute, Field, FieldMutability, Type, Visibility};
7use syn::punctuated::Punctuated;
8use syn::token::{Brace, Comma, Dot, FatArrow, Paren, PathSep, Plus, Semi};
9pub use opposed::*;
10pub use wrapped::*;
11
12#[allow(unused)]
13pub type CommaPunctuated<T> = Punctuated<T, Comma>;
14#[allow(unused)]
15pub type CommaPunctuatedTokens = CommaPunctuated<TokenStream2>;
16#[allow(unused)]
17pub type Depunctuated<T> = Punctuated<T, Void>;
18#[allow(unused)]
19pub type BraceWrapped<S, SP> = Wrapped<S, SP, Brace>;
20#[allow(unused)]
21pub type ParenWrapped<S, SP> = Wrapped<S, SP, Paren>;
22#[allow(unused)]
23pub type CommaParenWrapped<S> = Wrapped<S, Comma, Paren>;
24#[allow(unused)]
25pub type SemiPunctuated<T> = Punctuated<T, Semi>;
26#[allow(unused)]
27pub type SemiPunctuatedTokens = SemiPunctuated<TokenStream2>;
28#[allow(unused)]
29pub type Colon2Punctuated<T> = Punctuated<T, PathSep>;
30#[allow(unused)]
31pub type AddPunctuated<T> = Punctuated<T, Plus>;
32#[allow(unused)]
33pub type DotPunctuated<T> = Punctuated<T, Dot>;
34
35#[allow(unused)]
36pub type Assignment<T1, T2> = Opposed<T1, T2, syn::token::Eq>;
37#[allow(unused)]
38pub type Lambda<T1, T2> = Opposed<T1, T2, FatArrow>;
39
40pub fn field(attrs: Vec<Attribute>, vis: Visibility, ident: Option<Ident>, ty: Type) -> Field {
41 Field { attrs, vis, mutability: FieldMutability::None, ident, colon_token: None, ty }
42}
43
44fn field_no_attrs(vis: Visibility, ident: Option<Ident>, ty: Type) -> Field {
45 field(vec![], vis, ident, ty)
46}
47pub fn pub_unnamed_field(ty: Type) -> Field {
48 field_no_attrs(Visibility::Public(Default::default()), None, ty)
49}
50pub fn inherited_named_field(ident: Ident, ty: Type) -> Field {
51 field_no_attrs(Visibility::Inherited, Some(ident), ty)
52}