use crate::*;
#[derive(Serialize, Deserialize)]
pub struct Abi {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) name: Option<LitStr>,
}
#[derive(Serialize, Deserialize)]
pub struct AngleBracketedGenericArguments {
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon2_token: bool,
pub(crate) args: Punctuated<GenericArgument>,
}
#[derive(Serialize, Deserialize)]
pub struct Attribute {
pub(crate) style: AttrStyle,
pub(crate) path: Path,
#[serde(default, skip_serializing_if = "TokenStream::is_empty")]
pub(crate) tokens: TokenStream,
}
#[derive(Serialize, Deserialize)]
pub struct BareFnArg {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) name: Option<Ident>,
pub(crate) ty: Type,
}
#[derive(Serialize, Deserialize)]
pub struct Binding {
pub(crate) ident: Ident,
pub(crate) ty: Type,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct Block {
pub(crate) stmts: Vec<Stmt>,
}
#[derive(Serialize, Deserialize, Default)]
#[serde(transparent)]
pub struct BoundLifetimes {
pub(crate) lifetimes: Punctuated<LifetimeDef>,
}
#[derive(Serialize, Deserialize)]
pub struct ConstParam {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) ident: Ident,
pub(crate) ty: Type,
#[serde(default, skip_serializing_if = "not")]
pub(crate) eq_token: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) default: Option<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct Constraint {
pub(crate) ident: Ident,
pub(crate) bounds: Punctuated<TypeParamBound>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprArray {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) elems: Punctuated<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprAssign {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) left: Box<Expr>,
pub(crate) right: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprAssignOp {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) left: Box<Expr>,
pub(crate) op: BinOp,
pub(crate) right: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprAsync {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "move")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) capture: bool,
#[serde(rename = "stmts")]
pub(crate) block: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprAwait {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) base: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprBinary {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) left: Box<Expr>,
pub(crate) op: BinOp,
pub(crate) right: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprBlock {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) label: Option<Label>,
#[serde(rename = "stmts")]
pub(crate) block: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprBox {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprBreak {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) label: Option<Lifetime>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) expr: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprCall {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) func: Box<Expr>,
pub(crate) args: Punctuated<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprCast {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
pub(crate) ty: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprClosure {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "async")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) asyncness: bool,
#[serde(rename = "static")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) movability: bool,
#[serde(rename = "move")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) capture: bool,
pub(crate) inputs: Punctuated<Pat>,
#[serde(default)]
pub(crate) output: ReturnType,
pub(crate) body: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprContinue {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) label: Option<Lifetime>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprField {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) base: Box<Expr>,
#[serde(flatten)]
pub(crate) member: Member,
}
#[derive(Serialize, Deserialize)]
pub struct ExprForLoop {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) label: Option<Label>,
pub(crate) pat: Pat,
pub(crate) expr: Box<Expr>,
pub(crate) body: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprGroup {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprIf {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) cond: Box<Expr>,
pub(crate) then_branch: Block,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) else_branch: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprIndex {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
pub(crate) index: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprLet {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) pat: Pat,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprLit {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) lit: Lit,
}
#[derive(Serialize, Deserialize)]
pub struct ExprLoop {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) label: Option<Label>,
pub(crate) body: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprMacro {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) mac: Macro,
}
#[derive(Serialize, Deserialize)]
pub struct ExprMatch {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
pub(crate) arms: Vec<Arm>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprMethodCall {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) receiver: Box<Expr>,
pub(crate) method: Ident,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) turbofish: Option<MethodTurbofish>,
pub(crate) args: Punctuated<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprParen {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprPath {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) qself: Option<QSelf>,
#[serde(flatten)]
pub(crate) path: Path,
}
#[derive(Serialize, Deserialize)]
pub struct ExprRange {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) from: Option<Box<Expr>>,
pub(crate) limits: RangeLimits,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) to: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprReference {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprRepeat {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
pub(crate) len: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprReturn {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) expr: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprStruct {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) path: Path,
pub(crate) fields: Punctuated<FieldValue>,
#[serde(default, skip_serializing_if = "not")]
pub(crate) dot2_token: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) rest: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprTry {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprTryBlock {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "stmts")]
pub(crate) block: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprTuple {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) elems: Punctuated<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprType {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
pub(crate) ty: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprUnary {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) op: UnOp,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ExprUnsafe {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "stmts")]
pub(crate) block: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprWhile {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) label: Option<Label>,
pub(crate) cond: Box<Expr>,
pub(crate) body: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ExprYield {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) expr: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct FieldPat {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) member: Member,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
pub(crate) pat: Box<Pat>,
}
#[derive(Serialize, Deserialize)]
pub struct FieldValue {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) member: Member,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
pub(crate) expr: Expr,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct FieldsNamed {
pub(crate) named: Punctuated<Field>,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct FieldsUnnamed {
pub(crate) unnamed: Punctuated<Field>,
}
#[derive(Serialize, Deserialize)]
pub struct File {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) shebang: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) items: Vec<Item>,
}
#[derive(Serialize, Deserialize)]
pub struct ForeignItemFn {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(flatten)]
pub(crate) sig: Signature,
}
#[derive(Serialize, Deserialize)]
pub struct ForeignItemMacro {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) mac: Macro,
#[serde(default, skip_serializing_if = "not")]
pub(crate) semi_token: bool,
}
#[derive(Serialize, Deserialize)]
pub struct ForeignItemStatic {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) ident: Ident,
pub(crate) ty: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct ForeignItemType {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
}
#[derive(Serialize, Deserialize)]
pub struct ImplItemConst {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "default")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) defaultness: bool,
pub(crate) ident: Ident,
pub(crate) ty: Type,
pub(crate) expr: Expr,
}
#[derive(Serialize, Deserialize)]
pub struct ImplItemMacro {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) mac: Macro,
#[serde(default, skip_serializing_if = "not")]
pub(crate) semi_token: bool,
}
#[derive(Serialize, Deserialize)]
pub struct ImplItemMethod {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "default")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) defaultness: bool,
#[serde(flatten)]
pub(crate) sig: Signature,
#[serde(rename = "stmts")]
pub(crate) block: Block,
}
#[derive(Serialize, Deserialize)]
pub struct ImplItemType {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "default")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) defaultness: bool,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
pub(crate) ty: Type,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct Index {
pub(crate) index: u32,
}
#[derive(Serialize, Deserialize)]
pub struct ItemConst {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
pub(crate) ty: Box<Type>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemEnum {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
pub(crate) variants: Punctuated<Variant>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemExternCrate {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) rename: Option<Ident>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemFn {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(flatten)]
pub(crate) sig: Signature,
#[serde(rename = "stmts")]
pub(crate) block: Box<Block>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemForeignMod {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) abi: Abi,
pub(crate) items: Vec<ForeignItem>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemImpl {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "default")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) defaultness: bool,
#[serde(rename = "unsafe")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) unsafety: bool,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(rename = "trait")]
pub(crate) trait_: Option<(bool, Path)>,
pub(crate) self_ty: Box<Type>,
pub(crate) items: Vec<ImplItem>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemMacro {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) ident: Option<Ident>,
#[serde(flatten)]
pub(crate) mac: Macro,
#[serde(default, skip_serializing_if = "not")]
pub(crate) semi_token: bool,
}
#[derive(Serialize, Deserialize)]
pub struct ItemMacro2 {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
pub(crate) rules: TokenStream,
}
#[derive(Serialize, Deserialize)]
pub struct ItemStatic {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) ident: Ident,
pub(crate) ty: Box<Type>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemTrait {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(rename = "unsafe")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) unsafety: bool,
#[serde(rename = "auto")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) auto_token: bool,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
#[serde(default, skip_serializing_if = "Punctuated::is_empty")]
pub(crate) supertraits: Punctuated<TypeParamBound>,
pub(crate) items: Vec<TraitItem>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemTraitAlias {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
pub(crate) bounds: Punctuated<TypeParamBound>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemType {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
pub(crate) ty: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct ItemUnion {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
pub(crate) fields: FieldsNamed,
}
#[derive(Serialize, Deserialize)]
pub struct ItemUse {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Visibility::is_inherited")]
pub(crate) vis: Visibility,
#[serde(default, skip_serializing_if = "not")]
pub(crate) leading_colon: bool,
pub(crate) tree: UseTree,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct Label {
pub(crate) name: Lifetime,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(transparent)]
pub struct Lifetime {
pub(crate) ident: Ident,
}
#[derive(Serialize, Deserialize)]
pub struct LifetimeDef {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) lifetime: Lifetime,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
#[serde(default, skip_serializing_if = "Punctuated::is_empty")]
pub(crate) bounds: Punctuated<Lifetime>,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct LitBool {
pub(crate) value: bool,
}
#[derive(Serialize, Deserialize)]
pub struct Local {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) pat: Pat,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) init: Option<Box<Expr>>,
}
#[derive(Serialize, Deserialize)]
pub struct Macro {
pub(crate) path: Path,
pub(crate) delimiter: MacroDelimiter,
pub(crate) tokens: TokenStream,
}
#[derive(Serialize, Deserialize)]
pub struct MetaList {
pub(crate) path: Path,
pub(crate) nested: Punctuated<NestedMeta>,
}
#[derive(Serialize, Deserialize)]
pub struct MetaNameValue {
pub(crate) path: Path,
pub(crate) lit: Lit,
}
#[derive(Serialize, Deserialize)]
pub struct MethodTurbofish {
pub(crate) args: Punctuated<GenericMethodArgument>,
}
#[derive(Serialize, Deserialize)]
pub struct ParenthesizedGenericArguments {
pub(crate) inputs: Punctuated<Type>,
#[serde(default)]
pub(crate) output: ReturnType,
}
#[derive(Serialize, Deserialize)]
pub struct PatBox {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) pat: Box<Pat>,
}
#[derive(Serialize, Deserialize)]
pub struct PatIdent {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "ref")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) by_ref: bool,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) subpat: Option<Box<Pat>>,
}
#[derive(Serialize, Deserialize)]
pub struct PatLit {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) expr: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct PatMacro {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) mac: Macro,
}
#[derive(Serialize, Deserialize)]
pub struct PatPath {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) qself: Option<QSelf>,
#[serde(flatten)]
pub(crate) path: Path,
}
#[derive(Serialize, Deserialize)]
pub struct PatRange {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) lo: Box<Expr>,
pub(crate) limits: RangeLimits,
pub(crate) hi: Box<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct PatReference {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) pat: Box<Pat>,
}
#[derive(Serialize, Deserialize)]
pub struct PatRest {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
}
#[derive(Serialize, Deserialize)]
pub struct PatSlice {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) elems: Punctuated<Pat>,
}
#[derive(Serialize, Deserialize)]
pub struct PatStruct {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) path: Path,
pub(crate) fields: Punctuated<FieldPat>,
#[serde(default, skip_serializing_if = "not")]
pub(crate) dot2_token: bool,
}
#[derive(Serialize, Deserialize)]
pub struct PatTuple {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) elems: Punctuated<Pat>,
}
#[derive(Serialize, Deserialize)]
pub struct PatTupleStruct {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) path: Path,
pub(crate) pat: PatTuple,
}
#[derive(Serialize, Deserialize)]
pub struct PatType {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) pat: Box<Pat>,
pub(crate) ty: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct PatWild {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
}
#[derive(Serialize, Deserialize)]
pub struct Path {
#[serde(default, skip_serializing_if = "not")]
pub(crate) leading_colon: bool,
pub(crate) segments: Punctuated<PathSegment>,
}
#[derive(Serialize, Deserialize)]
pub struct PathSegment {
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "PathArguments::is_none")]
pub(crate) arguments: PathArguments,
}
#[derive(Serialize, Deserialize)]
pub struct PredicateEq {
pub(crate) lhs_ty: Type,
pub(crate) rhs_ty: Type,
}
#[derive(Serialize, Deserialize)]
pub struct PredicateLifetime {
pub(crate) lifetime: Lifetime,
pub(crate) bounds: Punctuated<Lifetime>,
}
#[derive(Serialize, Deserialize)]
pub struct QSelf {
pub(crate) ty: Box<Type>,
pub(crate) position: usize,
#[serde(default, skip_serializing_if = "not")]
pub(crate) as_token: bool,
}
#[derive(Serialize, Deserialize)]
pub struct Signature {
#[serde(rename = "const")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) constness: bool,
#[serde(rename = "async")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) asyncness: bool,
#[serde(rename = "unsafe")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) unsafety: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) abi: Option<Abi>,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
pub(crate) inputs: Punctuated<FnArg>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) variadic: Option<Variadic>,
#[serde(default)]
pub(crate) output: ReturnType,
}
#[derive(Serialize, Deserialize)]
pub struct TraitBound {
#[serde(default, skip_serializing_if = "not")]
pub(crate) paren_token: bool,
#[serde(default, skip_serializing_if = "TraitBoundModifier::is_none")]
pub(crate) modifier: TraitBoundModifier,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) lifetimes: Option<BoundLifetimes>,
pub(crate) path: Path,
}
#[derive(Serialize, Deserialize)]
pub struct TraitItemConst {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) ident: Ident,
pub(crate) ty: Type,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) default: Option<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct TraitItemMacro {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
#[serde(flatten)]
pub(crate) mac: Macro,
#[serde(default, skip_serializing_if = "not")]
pub(crate) semi_token: bool,
}
#[derive(Serialize, Deserialize)]
pub struct TraitItemType {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "Generics::is_none")]
pub(crate) generics: Generics,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
#[serde(default, skip_serializing_if = "Punctuated::is_empty")]
pub(crate) bounds: Punctuated<TypeParamBound>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) default: Option<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeArray {
pub(crate) elem: Box<Type>,
pub(crate) len: Expr,
}
#[derive(Serialize, Deserialize)]
pub struct TypeBareFn {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) lifetimes: Option<BoundLifetimes>,
#[serde(rename = "unsafe")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) unsafety: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) abi: Option<Abi>,
pub(crate) inputs: Punctuated<BareFnArg>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) variadic: Option<Variadic>,
#[serde(default)]
pub(crate) output: ReturnType,
}
#[derive(Serialize, Deserialize)]
pub struct TypeGroup {
pub(crate) elem: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeImplTrait {
pub(crate) bounds: Punctuated<TypeParamBound>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeMacro {
#[serde(flatten)]
pub(crate) mac: Macro,
}
#[derive(Serialize, Deserialize)]
pub struct TypeParam {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) ident: Ident,
#[serde(default, skip_serializing_if = "not")]
pub(crate) colon_token: bool,
#[serde(default, skip_serializing_if = "Punctuated::is_empty")]
pub(crate) bounds: Punctuated<TypeParamBound>,
#[serde(default, skip_serializing_if = "not")]
pub(crate) eq_token: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) default: Option<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeParen {
pub(crate) elem: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypePath {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) qself: Option<QSelf>,
#[serde(flatten)]
pub(crate) path: Path,
}
#[derive(Serialize, Deserialize)]
pub struct TypePtr {
#[serde(rename = "const")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) const_token: bool,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) elem: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeReference {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) lifetime: Option<Lifetime>,
#[serde(rename = "mut")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) mutability: bool,
pub(crate) elem: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeSlice {
pub(crate) elem: Box<Type>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeTraitObject {
#[serde(rename = "dyn")]
#[serde(default, skip_serializing_if = "not")]
pub(crate) dyn_token: bool,
pub(crate) bounds: Punctuated<TypeParamBound>,
}
#[derive(Serialize, Deserialize)]
pub struct TypeTuple {
pub(crate) elems: Punctuated<Type>,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct UseGroup {
pub(crate) items: Punctuated<UseTree>,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct UseName {
pub(crate) ident: Ident,
}
#[derive(Serialize, Deserialize)]
pub struct UsePath {
pub(crate) ident: Ident,
pub(crate) tree: Box<UseTree>,
}
#[derive(Serialize, Deserialize)]
pub struct UseRename {
pub(crate) ident: Ident,
pub(crate) rename: Ident,
}
#[derive(Serialize, Deserialize)]
pub struct Variadic {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
}
#[derive(Serialize, Deserialize)]
pub struct Variant {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(crate) attrs: Vec<Attribute>,
pub(crate) ident: Ident,
pub(crate) fields: Fields,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) discriminant: Option<Expr>,
}
#[derive(Serialize, Deserialize)]
pub struct VisRestricted {
#[serde(default, skip_serializing_if = "not")]
pub(crate) in_token: bool,
pub(crate) path: Box<Path>,
}
#[derive(Serialize, Deserialize)]
#[serde(transparent)]
pub struct WhereClause {
pub(crate) predicates: Punctuated<WherePredicate>,
}