hydra-ext-0.17.0: src/main/haskell/Hydra/Rust/Syntax.hs
-- Note: this is an automatically generated file. Do not edit.
-- | A Rust syntax model, based on the Rust Reference grammar (https://doc.rust-lang.org/reference/), retrieved 2025-01-29
module Hydra.Rust.Syntax where
import qualified Hydra.Core as Core
import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
import qualified Data.ByteString as B
import qualified Data.Int as I
-- | A Rust crate, represented as a collection of top-level items
data Crate =
Crate {
-- | The top-level items in the crate
crateItems :: [ItemWithComments]}
deriving (Eq, Ord, Read, Show)
_Crate = Core.Name "hydra.rust.syntax.Crate"
_Crate_items = Core.Name "items"
-- | A top-level item in a Rust module or crate
data Item =
-- | A use declaration
ItemUse UseDeclaration |
-- | A struct definition
ItemStruct StructDef |
-- | An enum definition
ItemEnum EnumDef |
-- | A function definition
ItemFn FnDef |
-- | A type alias
ItemTypeAlias TypeAlias |
-- | An impl block
ItemImpl ImplBlock |
-- | A trait definition
ItemTrait TraitDef |
-- | A module definition
ItemMod ModDef |
-- | A constant item
ItemConst ConstDef |
-- | A static item
ItemStatic StaticDef |
-- | A macro invocation as an item
ItemMacro MacroInvocation
deriving (Eq, Ord, Read, Show)
_Item = Core.Name "hydra.rust.syntax.Item"
_Item_use = Core.Name "use"
_Item_struct = Core.Name "struct"
_Item_enum = Core.Name "enum"
_Item_fn = Core.Name "fn"
_Item_typeAlias = Core.Name "typeAlias"
_Item_impl = Core.Name "impl"
_Item_trait = Core.Name "trait"
_Item_mod = Core.Name "mod"
_Item_const = Core.Name "const"
_Item_static = Core.Name "static"
_Item_macro = Core.Name "macro"
-- | An item together with optional doc comments and visibility
data ItemWithComments =
ItemWithComments {
-- | Optional documentation comment
itemWithCommentsDoc :: (Maybe String),
-- | The item's visibility
itemWithCommentsVisibility :: Visibility,
-- | The item itself
itemWithCommentsItem :: Item}
deriving (Eq, Ord, Read, Show)
_ItemWithComments = Core.Name "hydra.rust.syntax.ItemWithComments"
_ItemWithComments_doc = Core.Name "doc"
_ItemWithComments_visibility = Core.Name "visibility"
_ItemWithComments_item = Core.Name "item"
-- | A use declaration (e.g., use std::collections::BTreeMap;)
data UseDeclaration =
UseDeclaration {
-- | Whether the use is public (pub use)
useDeclarationPublic :: Bool,
-- | The use tree describing what is imported
useDeclarationTree :: UseTree}
deriving (Eq, Ord, Read, Show)
_UseDeclaration = Core.Name "hydra.rust.syntax.UseDeclaration"
_UseDeclaration_public = Core.Name "public"
_UseDeclaration_tree = Core.Name "tree"
-- | A use tree, representing the structure of a use path
data UseTree =
-- | A simple path import
UseTreePath UsePath |
-- | A renamed import (e.g., BTreeMap as Map)
UseTreeRename UseRename |
-- | A glob import (e.g., std::collections::*)
UseTreeGlob [String] |
-- | A grouped import (e.g., {BTreeMap, BTreeSet})
UseTreeGroup UseGroup
deriving (Eq, Ord, Read, Show)
_UseTree = Core.Name "hydra.rust.syntax.UseTree"
_UseTree_path = Core.Name "path"
_UseTree_rename = Core.Name "rename"
_UseTree_glob = Core.Name "glob"
_UseTree_group = Core.Name "group"
-- | A simple path import within a use tree
data UsePath =
UsePath {
-- | The path segments
usePathSegments :: [String]}
deriving (Eq, Ord, Read, Show)
_UsePath = Core.Name "hydra.rust.syntax.UsePath"
_UsePath_segments = Core.Name "segments"
-- | A renamed import (e.g., BTreeMap as Map)
data UseRename =
UseRename {
-- | The original path segments
useRenamePath :: [String],
-- | The alias name
useRenameAlias :: String}
deriving (Eq, Ord, Read, Show)
_UseRename = Core.Name "hydra.rust.syntax.UseRename"
_UseRename_path = Core.Name "path"
_UseRename_alias = Core.Name "alias"
-- | A grouped import (e.g., std::collections::{BTreeMap, BTreeSet})
data UseGroup =
UseGroup {
-- | The common prefix path segments
useGroupPrefix :: [String],
-- | The individual subtrees within the group
useGroupTrees :: [UseTree]}
deriving (Eq, Ord, Read, Show)
_UseGroup = Core.Name "hydra.rust.syntax.UseGroup"
_UseGroup_prefix = Core.Name "prefix"
_UseGroup_trees = Core.Name "trees"
-- | A struct definition (e.g., struct Foo<T> { bar: T })
data StructDef =
StructDef {
-- | The struct name
structDefName :: String,
-- | Generic type parameters
structDefGenerics :: [GenericParam],
-- | Optional where clause
structDefWhereClause :: (Maybe WhereClause),
-- | The struct body (named fields, tuple fields, or unit)
structDefBody :: StructBody,
-- | Derive macros to apply
structDefDerives :: [String],
-- | Whether the struct is public
structDefPublic :: Bool,
-- | Optional doc comment
structDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_StructDef = Core.Name "hydra.rust.syntax.StructDef"
_StructDef_name = Core.Name "name"
_StructDef_generics = Core.Name "generics"
_StructDef_whereClause = Core.Name "whereClause"
_StructDef_body = Core.Name "body"
_StructDef_derives = Core.Name "derives"
_StructDef_public = Core.Name "public"
_StructDef_doc = Core.Name "doc"
-- | The body of a struct definition
data StructBody =
-- | A struct with named fields
StructBodyNamed [StructField] |
-- | A tuple struct
StructBodyTuple [TupleField] |
-- | A unit struct
StructBodyUnit
deriving (Eq, Ord, Read, Show)
_StructBody = Core.Name "hydra.rust.syntax.StructBody"
_StructBody_named = Core.Name "named"
_StructBody_tuple = Core.Name "tuple"
_StructBody_unit = Core.Name "unit"
-- | A named field within a struct definition
data StructField =
StructField {
-- | The field name
structFieldName :: String,
-- | The field type
structFieldType :: Type,
-- | Whether the field is public
structFieldPublic :: Bool,
-- | Optional doc comment for the field
structFieldDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_StructField = Core.Name "hydra.rust.syntax.StructField"
_StructField_name = Core.Name "name"
_StructField_type = Core.Name "type"
_StructField_public = Core.Name "public"
_StructField_doc = Core.Name "doc"
-- | A positional field within a tuple struct
data TupleField =
TupleField {
-- | The field type
tupleFieldType :: Type,
-- | Whether the field is public
tupleFieldPublic :: Bool}
deriving (Eq, Ord, Read, Show)
_TupleField = Core.Name "hydra.rust.syntax.TupleField"
_TupleField_type = Core.Name "type"
_TupleField_public = Core.Name "public"
-- | An enum definition (e.g., enum Foo<T> { Bar(T), Baz { x: i32 } })
data EnumDef =
EnumDef {
-- | The enum name
enumDefName :: String,
-- | Generic type parameters
enumDefGenerics :: [GenericParam],
-- | Optional where clause
enumDefWhereClause :: (Maybe WhereClause),
-- | The enum variants
enumDefVariants :: [EnumVariant],
-- | Derive macros to apply
enumDefDerives :: [String],
-- | Whether the enum is public
enumDefPublic :: Bool,
-- | Optional doc comment
enumDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_EnumDef = Core.Name "hydra.rust.syntax.EnumDef"
_EnumDef_name = Core.Name "name"
_EnumDef_generics = Core.Name "generics"
_EnumDef_whereClause = Core.Name "whereClause"
_EnumDef_variants = Core.Name "variants"
_EnumDef_derives = Core.Name "derives"
_EnumDef_public = Core.Name "public"
_EnumDef_doc = Core.Name "doc"
-- | A variant of an enum definition
data EnumVariant =
EnumVariant {
-- | The variant name
enumVariantName :: String,
-- | The variant body
enumVariantBody :: EnumVariantBody,
-- | Optional doc comment for the variant
enumVariantDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_EnumVariant = Core.Name "hydra.rust.syntax.EnumVariant"
_EnumVariant_name = Core.Name "name"
_EnumVariant_body = Core.Name "body"
_EnumVariant_doc = Core.Name "doc"
-- | The body of an enum variant
data EnumVariantBody =
-- | A unit variant (e.g., Foo)
EnumVariantBodyUnit |
-- | A tuple variant (e.g., Foo(i32, String))
EnumVariantBodyTuple [Type] |
-- | A struct variant (e.g., Foo { x: i32 })
EnumVariantBodyStruct [StructField]
deriving (Eq, Ord, Read, Show)
_EnumVariantBody = Core.Name "hydra.rust.syntax.EnumVariantBody"
_EnumVariantBody_unit = Core.Name "unit"
_EnumVariantBody_tuple = Core.Name "tuple"
_EnumVariantBody_struct = Core.Name "struct"
-- | A function definition (e.g., fn foo<T>(x: T) -> String { ... })
data FnDef =
FnDef {
-- | The function name
fnDefName :: String,
-- | Generic type parameters
fnDefGenerics :: [GenericParam],
-- | Optional where clause
fnDefWhereClause :: (Maybe WhereClause),
-- | The function parameters
fnDefParams :: [FnParam],
-- | The return type (None means ())
fnDefReturnType :: (Maybe Type),
-- | The function body
fnDefBody :: Block,
-- | Whether the function is public
fnDefPublic :: Bool,
-- | Whether the function is async
fnDefAsync :: Bool,
-- | Whether the function is const
fnDefConst :: Bool,
-- | Whether the function is unsafe
fnDefUnsafe :: Bool,
-- | Optional doc comment
fnDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_FnDef = Core.Name "hydra.rust.syntax.FnDef"
_FnDef_name = Core.Name "name"
_FnDef_generics = Core.Name "generics"
_FnDef_whereClause = Core.Name "whereClause"
_FnDef_params = Core.Name "params"
_FnDef_returnType = Core.Name "returnType"
_FnDef_body = Core.Name "body"
_FnDef_public = Core.Name "public"
_FnDef_async = Core.Name "async"
_FnDef_const = Core.Name "const"
_FnDef_unsafe = Core.Name "unsafe"
_FnDef_doc = Core.Name "doc"
-- | A function parameter
data FnParam =
FnParam {
-- | The parameter pattern
fnParamPattern :: Pattern,
-- | The parameter type
fnParamType :: Type}
deriving (Eq, Ord, Read, Show)
_FnParam = Core.Name "hydra.rust.syntax.FnParam"
_FnParam_pattern = Core.Name "pattern"
_FnParam_type = Core.Name "type"
-- | A self parameter in a method
data SelfParam =
SelfParamOwned |
SelfParamRef |
SelfParamRefMut
deriving (Eq, Ord, Read, Show)
_SelfParam = Core.Name "hydra.rust.syntax.SelfParam"
_SelfParam_owned = Core.Name "owned"
_SelfParam_ref = Core.Name "ref"
_SelfParam_refMut = Core.Name "refMut"
-- | A method parameter, which may be self or a regular parameter
data MethodParam =
-- | A self parameter
MethodParamSelf SelfParam |
-- | A regular function parameter
MethodParamRegular FnParam
deriving (Eq, Ord, Read, Show)
_MethodParam = Core.Name "hydra.rust.syntax.MethodParam"
_MethodParam_self = Core.Name "self"
_MethodParam_regular = Core.Name "regular"
-- | A type alias definition (e.g., type Foo<T> = Bar<T>;)
data TypeAlias =
TypeAlias {
-- | The alias name
typeAliasName :: String,
-- | Generic type parameters
typeAliasGenerics :: [GenericParam],
-- | The aliased type
typeAliasType :: Type,
-- | Whether the alias is public
typeAliasPublic :: Bool,
-- | Optional doc comment
typeAliasDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_TypeAlias = Core.Name "hydra.rust.syntax.TypeAlias"
_TypeAlias_name = Core.Name "name"
_TypeAlias_generics = Core.Name "generics"
_TypeAlias_type = Core.Name "type"
_TypeAlias_public = Core.Name "public"
_TypeAlias_doc = Core.Name "doc"
-- | A constant item (e.g., const FOO: u32 = 42;)
data ConstDef =
ConstDef {
-- | The constant name
constDefName :: String,
-- | The constant type
constDefType :: Type,
-- | The constant value expression
constDefValue :: Expression,
-- | Whether the constant is public
constDefPublic :: Bool,
-- | Optional doc comment
constDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_ConstDef = Core.Name "hydra.rust.syntax.ConstDef"
_ConstDef_name = Core.Name "name"
_ConstDef_type = Core.Name "type"
_ConstDef_value = Core.Name "value"
_ConstDef_public = Core.Name "public"
_ConstDef_doc = Core.Name "doc"
-- | A static item (e.g., static FOO: u32 = 42;)
data StaticDef =
StaticDef {
-- | The static name
staticDefName :: String,
-- | The static type
staticDefType :: Type,
-- | The static value expression
staticDefValue :: Expression,
-- | Whether the static is mutable
staticDefMutable :: Bool,
-- | Whether the static is public
staticDefPublic :: Bool,
-- | Optional doc comment
staticDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_StaticDef = Core.Name "hydra.rust.syntax.StaticDef"
_StaticDef_name = Core.Name "name"
_StaticDef_type = Core.Name "type"
_StaticDef_value = Core.Name "value"
_StaticDef_mutable = Core.Name "mutable"
_StaticDef_public = Core.Name "public"
_StaticDef_doc = Core.Name "doc"
-- | A module definition (either inline or external)
data ModDef =
ModDef {
-- | The module name
modDefName :: String,
-- | The module body (None for external file)
modDefBody :: (Maybe [Item]),
-- | Whether the module is public
modDefPublic :: Bool,
-- | Optional doc comment
modDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_ModDef = Core.Name "hydra.rust.syntax.ModDef"
_ModDef_name = Core.Name "name"
_ModDef_body = Core.Name "body"
_ModDef_public = Core.Name "public"
_ModDef_doc = Core.Name "doc"
-- | An impl block (e.g., impl<T> Trait for Foo<T> { ... })
data ImplBlock =
ImplBlock {
-- | Generic type parameters
implBlockGenerics :: [GenericParam],
-- | Optional where clause
implBlockWhereClause :: (Maybe WhereClause),
-- | The trait being implemented, if any
implBlockTrait :: (Maybe TypePath),
-- | Whether this is a negative impl
implBlockNegative :: Bool,
-- | The type being implemented for
implBlockSelfType :: Type,
-- | The items within the impl block
implBlockItems :: [ImplItem]}
deriving (Eq, Ord, Read, Show)
_ImplBlock = Core.Name "hydra.rust.syntax.ImplBlock"
_ImplBlock_generics = Core.Name "generics"
_ImplBlock_whereClause = Core.Name "whereClause"
_ImplBlock_trait = Core.Name "trait"
_ImplBlock_negative = Core.Name "negative"
_ImplBlock_selfType = Core.Name "selfType"
_ImplBlock_items = Core.Name "items"
-- | An item within an impl block
data ImplItem =
-- | A method definition
ImplItemMethod ImplMethod |
-- | An associated type definition
ImplItemType TypeAlias |
-- | An associated constant
ImplItemConst ConstDef
deriving (Eq, Ord, Read, Show)
_ImplItem = Core.Name "hydra.rust.syntax.ImplItem"
_ImplItem_method = Core.Name "method"
_ImplItem_type = Core.Name "type"
_ImplItem_const = Core.Name "const"
-- | A method within an impl block
data ImplMethod =
ImplMethod {
-- | The method name
implMethodName :: String,
-- | Generic type parameters
implMethodGenerics :: [GenericParam],
-- | Optional where clause
implMethodWhereClause :: (Maybe WhereClause),
-- | The method parameters (including self)
implMethodParams :: [MethodParam],
-- | The return type (None means ())
implMethodReturnType :: (Maybe Type),
-- | The method body
implMethodBody :: Block,
-- | Whether the method is public
implMethodPublic :: Bool,
-- | Whether the method has a default implementation
implMethodDefault :: Bool,
-- | Optional doc comment
implMethodDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_ImplMethod = Core.Name "hydra.rust.syntax.ImplMethod"
_ImplMethod_name = Core.Name "name"
_ImplMethod_generics = Core.Name "generics"
_ImplMethod_whereClause = Core.Name "whereClause"
_ImplMethod_params = Core.Name "params"
_ImplMethod_returnType = Core.Name "returnType"
_ImplMethod_body = Core.Name "body"
_ImplMethod_public = Core.Name "public"
_ImplMethod_default = Core.Name "default"
_ImplMethod_doc = Core.Name "doc"
-- | A trait definition (e.g., trait Foo<T>: Bar + Baz { ... })
data TraitDef =
TraitDef {
-- | The trait name
traitDefName :: String,
-- | Generic type parameters
traitDefGenerics :: [GenericParam],
-- | Optional where clause
traitDefWhereClause :: (Maybe WhereClause),
-- | Supertraits
traitDefSuperTraits :: [TypeParamBound],
-- | The items within the trait
traitDefItems :: [TraitItem],
-- | Whether the trait is public
traitDefPublic :: Bool,
-- | Whether the trait is unsafe
traitDefUnsafe :: Bool,
-- | Optional doc comment
traitDefDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_TraitDef = Core.Name "hydra.rust.syntax.TraitDef"
_TraitDef_name = Core.Name "name"
_TraitDef_generics = Core.Name "generics"
_TraitDef_whereClause = Core.Name "whereClause"
_TraitDef_superTraits = Core.Name "superTraits"
_TraitDef_items = Core.Name "items"
_TraitDef_public = Core.Name "public"
_TraitDef_unsafe = Core.Name "unsafe"
_TraitDef_doc = Core.Name "doc"
-- | An item within a trait definition
data TraitItem =
-- | A method signature or default method
TraitItemMethod TraitMethod |
-- | An associated type
TraitItemType TraitType |
-- | An associated constant
TraitItemConst TraitConst
deriving (Eq, Ord, Read, Show)
_TraitItem = Core.Name "hydra.rust.syntax.TraitItem"
_TraitItem_method = Core.Name "method"
_TraitItem_type = Core.Name "type"
_TraitItem_const = Core.Name "const"
-- | A method signature or default method within a trait
data TraitMethod =
TraitMethod {
-- | The method name
traitMethodName :: String,
-- | Generic type parameters
traitMethodGenerics :: [GenericParam],
-- | Optional where clause
traitMethodWhereClause :: (Maybe WhereClause),
-- | The method parameters (including self)
traitMethodParams :: [MethodParam],
-- | The return type
traitMethodReturnType :: (Maybe Type),
-- | Optional default body
traitMethodDefaultBody :: (Maybe Block),
-- | Optional doc comment
traitMethodDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_TraitMethod = Core.Name "hydra.rust.syntax.TraitMethod"
_TraitMethod_name = Core.Name "name"
_TraitMethod_generics = Core.Name "generics"
_TraitMethod_whereClause = Core.Name "whereClause"
_TraitMethod_params = Core.Name "params"
_TraitMethod_returnType = Core.Name "returnType"
_TraitMethod_defaultBody = Core.Name "defaultBody"
_TraitMethod_doc = Core.Name "doc"
-- | An associated type within a trait
data TraitType =
TraitType {
-- | The associated type name
traitTypeName :: String,
-- | Type parameter bounds
traitTypeBounds :: [TypeParamBound],
-- | Optional default type
traitTypeDefault :: (Maybe Type),
-- | Optional doc comment
traitTypeDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_TraitType = Core.Name "hydra.rust.syntax.TraitType"
_TraitType_name = Core.Name "name"
_TraitType_bounds = Core.Name "bounds"
_TraitType_default = Core.Name "default"
_TraitType_doc = Core.Name "doc"
-- | An associated constant within a trait
data TraitConst =
TraitConst {
-- | The constant name
traitConstName :: String,
-- | The constant type
traitConstType :: Type,
-- | Optional default value
traitConstDefault :: (Maybe Expression),
-- | Optional doc comment
traitConstDoc :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_TraitConst = Core.Name "hydra.rust.syntax.TraitConst"
_TraitConst_name = Core.Name "name"
_TraitConst_type = Core.Name "type"
_TraitConst_default = Core.Name "default"
_TraitConst_doc = Core.Name "doc"
-- | A generic type parameter (e.g., T: Clone + Debug)
data GenericParam =
GenericParam {
-- | The parameter name
genericParamName :: String,
-- | Trait bounds on the parameter
genericParamBounds :: [TypeParamBound]}
deriving (Eq, Ord, Read, Show)
_GenericParam = Core.Name "hydra.rust.syntax.GenericParam"
_GenericParam_name = Core.Name "name"
_GenericParam_bounds = Core.Name "bounds"
-- | A bound on a type parameter
data TypeParamBound =
-- | A trait bound
TypeParamBoundTrait TypePath |
-- | A lifetime bound
TypeParamBoundLifetime Lifetime
deriving (Eq, Ord, Read, Show)
_TypeParamBound = Core.Name "hydra.rust.syntax.TypeParamBound"
_TypeParamBound_trait = Core.Name "trait"
_TypeParamBound_lifetime = Core.Name "lifetime"
-- | A lifetime (e.g., 'a, 'static)
data Lifetime =
Lifetime {
-- | The lifetime name (without the leading quote)
lifetimeName :: String}
deriving (Eq, Ord, Read, Show)
_Lifetime = Core.Name "hydra.rust.syntax.Lifetime"
_Lifetime_name = Core.Name "name"
-- | A where clause (e.g., where T: Clone, U: Debug)
data WhereClause =
WhereClause {
-- | The predicates in the where clause
whereClausePredicates :: [WherePredicate]}
deriving (Eq, Ord, Read, Show)
_WhereClause = Core.Name "hydra.rust.syntax.WhereClause"
_WhereClause_predicates = Core.Name "predicates"
-- | A single predicate in a where clause
data WherePredicate =
WherePredicate {
-- | The type being constrained
wherePredicateType :: Type,
-- | The bounds on the type
wherePredicateBounds :: [TypeParamBound]}
deriving (Eq, Ord, Read, Show)
_WherePredicate = Core.Name "hydra.rust.syntax.WherePredicate"
_WherePredicate_type = Core.Name "type"
_WherePredicate_bounds = Core.Name "bounds"
-- | A Rust type expression
data Type =
-- | A path type, possibly with generic arguments
TypePath_ TypePath |
-- | A reference type
TypeReference ReferenceType |
-- | A slice type
TypeSlice Type |
-- | An array type with a fixed size
TypeArray ArrayType |
-- | A tuple type
TypeTuple [Type] |
-- | A function pointer type
TypeFnPointer FnPointerType |
-- | An impl Trait type
TypeImplTrait [TypeParamBound] |
-- | A dyn Trait type
TypeDynTrait [TypeParamBound] |
-- | The inferred type placeholder (_)
TypeInferred |
-- | The unit type (())
TypeUnit |
-- | The never type (!)
TypeNever |
-- | A raw pointer type
TypeRawPointer RawPointerType |
-- | A macro invocation in type position
TypeMacro MacroInvocation
deriving (Eq, Ord, Read, Show)
_Type = Core.Name "hydra.rust.syntax.Type"
_Type_path = Core.Name "path"
_Type_reference = Core.Name "reference"
_Type_slice = Core.Name "slice"
_Type_array = Core.Name "array"
_Type_tuple = Core.Name "tuple"
_Type_fnPointer = Core.Name "fnPointer"
_Type_implTrait = Core.Name "implTrait"
_Type_dynTrait = Core.Name "dynTrait"
_Type_inferred = Core.Name "inferred"
_Type_unit = Core.Name "unit"
_Type_never = Core.Name "never"
_Type_rawPointer = Core.Name "rawPointer"
_Type_macro = Core.Name "macro"
-- | A path-based type, possibly with generic arguments
data TypePath =
TypePath {
-- | Whether the path is absolute (starts with ::)
typePathGlobal :: Bool,
-- | The segments of the path
typePathSegments :: [PathSegment]}
deriving (Eq, Ord, Read, Show)
_TypePath = Core.Name "hydra.rust.syntax.TypePath"
_TypePath_global = Core.Name "global"
_TypePath_segments = Core.Name "segments"
-- | A segment within a type path
data PathSegment =
PathSegment {
-- | The segment name
pathSegmentName :: String,
-- | Generic arguments, if any
pathSegmentArguments :: GenericArguments}
deriving (Eq, Ord, Read, Show)
_PathSegment = Core.Name "hydra.rust.syntax.PathSegment"
_PathSegment_name = Core.Name "name"
_PathSegment_arguments = Core.Name "arguments"
-- | Generic arguments to a path segment
data GenericArguments =
-- | No generic arguments
GenericArgumentsNone |
-- | Angle-bracketed arguments
GenericArgumentsAngleBracketed AngleBracketedArgs |
-- | Parenthesized arguments for Fn traits
GenericArgumentsParenthesized ParenthesizedArgs
deriving (Eq, Ord, Read, Show)
_GenericArguments = Core.Name "hydra.rust.syntax.GenericArguments"
_GenericArguments_none = Core.Name "none"
_GenericArguments_angleBracketed = Core.Name "angleBracketed"
_GenericArguments_parenthesized = Core.Name "parenthesized"
-- | Angle-bracketed generic arguments
data AngleBracketedArgs =
AngleBracketedArgs {
-- | The generic arguments
angleBracketedArgsArgs :: [GenericArg]}
deriving (Eq, Ord, Read, Show)
_AngleBracketedArgs = Core.Name "hydra.rust.syntax.AngleBracketedArgs"
_AngleBracketedArgs_args = Core.Name "args"
-- | A single generic argument
data GenericArg =
-- | A type argument
GenericArgType Type |
-- | A lifetime argument
GenericArgLifetime Lifetime |
-- | A const expression argument
GenericArgConst Expression |
-- | An associated type binding
GenericArgBinding TypeBinding
deriving (Eq, Ord, Read, Show)
_GenericArg = Core.Name "hydra.rust.syntax.GenericArg"
_GenericArg_type = Core.Name "type"
_GenericArg_lifetime = Core.Name "lifetime"
_GenericArg_const = Core.Name "const"
_GenericArg_binding = Core.Name "binding"
-- | An associated type binding within generic arguments
data TypeBinding =
TypeBinding {
-- | The associated type name
typeBindingName :: String,
-- | The bound type
typeBindingType :: Type}
deriving (Eq, Ord, Read, Show)
_TypeBinding = Core.Name "hydra.rust.syntax.TypeBinding"
_TypeBinding_name = Core.Name "name"
_TypeBinding_type = Core.Name "type"
-- | Parenthesized generic arguments for Fn traits
data ParenthesizedArgs =
ParenthesizedArgs {
-- | The input types
parenthesizedArgsInputs :: [Type],
-- | The output type
parenthesizedArgsOutput :: (Maybe Type)}
deriving (Eq, Ord, Read, Show)
_ParenthesizedArgs = Core.Name "hydra.rust.syntax.ParenthesizedArgs"
_ParenthesizedArgs_inputs = Core.Name "inputs"
_ParenthesizedArgs_output = Core.Name "output"
-- | A reference type (e.g., &T, &mut T, &'a T)
data ReferenceType =
ReferenceType {
-- | Optional lifetime annotation
referenceTypeLifetime :: (Maybe Lifetime),
-- | Whether the reference is mutable
referenceTypeMutable :: Bool,
-- | The referenced type
referenceTypeType :: Type}
deriving (Eq, Ord, Read, Show)
_ReferenceType = Core.Name "hydra.rust.syntax.ReferenceType"
_ReferenceType_lifetime = Core.Name "lifetime"
_ReferenceType_mutable = Core.Name "mutable"
_ReferenceType_type = Core.Name "type"
-- | An array type with a fixed size (e.g., [T; 3])
data ArrayType =
ArrayType {
-- | The element type
arrayTypeElement :: Type,
-- | The array length (as a constant expression)
arrayTypeLength :: Expression}
deriving (Eq, Ord, Read, Show)
_ArrayType = Core.Name "hydra.rust.syntax.ArrayType"
_ArrayType_element = Core.Name "element"
_ArrayType_length = Core.Name "length"
-- | A function pointer type (e.g., fn(i32, i32) -> i32)
data FnPointerType =
FnPointerType {
-- | The parameter types
fnPointerTypeParams :: [Type],
-- | The return type
fnPointerTypeReturnType :: Type}
deriving (Eq, Ord, Read, Show)
_FnPointerType = Core.Name "hydra.rust.syntax.FnPointerType"
_FnPointerType_params = Core.Name "params"
_FnPointerType_returnType = Core.Name "returnType"
-- | A raw pointer type (e.g., *const T, *mut T)
data RawPointerType =
RawPointerType {
-- | Whether the pointer is mutable (*mut vs *const)
rawPointerTypeMutable :: Bool,
-- | The pointed-to type
rawPointerTypeType :: Type}
deriving (Eq, Ord, Read, Show)
_RawPointerType = Core.Name "hydra.rust.syntax.RawPointerType"
_RawPointerType_mutable = Core.Name "mutable"
_RawPointerType_type = Core.Name "type"
-- | A Rust expression
data Expression =
-- | A literal value
ExpressionLiteral Literal |
-- | A path expression
ExpressionPath ExprPath |
-- | A block expression
ExpressionBlock Block |
-- | A function call expression
ExpressionCall CallExpr |
-- | A method call expression
ExpressionMethodCall MethodCallExpr |
-- | A field access expression
ExpressionFieldAccess FieldAccessExpr |
-- | A tuple index expression
ExpressionTupleIndex TupleIndexExpr |
-- | A closure expression
ExpressionClosure ClosureExpr |
-- | An if expression, including if let
ExpressionIf IfExpr |
-- | A match expression
ExpressionMatch MatchExpr |
-- | A loop expression
ExpressionLoop LoopExpr |
-- | A while expression, including while let
ExpressionWhile WhileExpr |
-- | A for expression
ExpressionFor ForExpr |
-- | A binary operation
ExpressionBinary BinaryExpr |
-- | A unary operation
ExpressionUnary UnaryExpr |
-- | A reference expression
ExpressionReference RefExpr |
-- | A dereference expression
ExpressionDereference Expression |
-- | A struct literal expression
ExpressionStruct StructExpr |
-- | A tuple expression
ExpressionTuple [Expression] |
-- | An array expression
ExpressionArray ArrayExpr |
-- | An index expression
ExpressionIndex IndexExpr |
-- | A range expression
ExpressionRange RangeExpr |
-- | A return expression
ExpressionReturn (Maybe Expression) |
-- | A break expression
ExpressionBreak (Maybe Expression) |
-- | A continue expression
ExpressionContinue |
-- | A try expression (expr?)
ExpressionTry Expression |
-- | A type cast expression
ExpressionCast CastExpr |
-- | A type ascription expression
ExpressionTypeAscription TypeAscriptionExpr |
-- | An await expression
ExpressionAwait Expression |
-- | An assignment expression
ExpressionAssign AssignExpr |
-- | A compound assignment expression
ExpressionCompoundAssign CompoundAssignExpr |
-- | A macro invocation expression
ExpressionMacro MacroInvocation |
-- | A parenthesized expression
ExpressionParen Expression
deriving (Eq, Ord, Read, Show)
_Expression = Core.Name "hydra.rust.syntax.Expression"
_Expression_literal = Core.Name "literal"
_Expression_path = Core.Name "path"
_Expression_block = Core.Name "block"
_Expression_call = Core.Name "call"
_Expression_methodCall = Core.Name "methodCall"
_Expression_fieldAccess = Core.Name "fieldAccess"
_Expression_tupleIndex = Core.Name "tupleIndex"
_Expression_closure = Core.Name "closure"
_Expression_if = Core.Name "if"
_Expression_match = Core.Name "match"
_Expression_loop = Core.Name "loop"
_Expression_while = Core.Name "while"
_Expression_for = Core.Name "for"
_Expression_binary = Core.Name "binary"
_Expression_unary = Core.Name "unary"
_Expression_reference = Core.Name "reference"
_Expression_dereference = Core.Name "dereference"
_Expression_struct = Core.Name "struct"
_Expression_tuple = Core.Name "tuple"
_Expression_array = Core.Name "array"
_Expression_index = Core.Name "index"
_Expression_range = Core.Name "range"
_Expression_return = Core.Name "return"
_Expression_break = Core.Name "break"
_Expression_continue = Core.Name "continue"
_Expression_try = Core.Name "try"
_Expression_cast = Core.Name "cast"
_Expression_typeAscription = Core.Name "typeAscription"
_Expression_await = Core.Name "await"
_Expression_assign = Core.Name "assign"
_Expression_compoundAssign = Core.Name "compoundAssign"
_Expression_macro = Core.Name "macro"
_Expression_paren = Core.Name "paren"
-- | A path used as an expression
data ExprPath =
ExprPath {
-- | Whether the path is global
exprPathGlobal :: Bool,
-- | The path segments
exprPathSegments :: [PathSegment]}
deriving (Eq, Ord, Read, Show)
_ExprPath = Core.Name "hydra.rust.syntax.ExprPath"
_ExprPath_global = Core.Name "global"
_ExprPath_segments = Core.Name "segments"
-- | A function call expression
data CallExpr =
CallExpr {
-- | The function being called
callExprFunction :: Expression,
-- | The arguments
callExprArgs :: [Expression]}
deriving (Eq, Ord, Read, Show)
_CallExpr = Core.Name "hydra.rust.syntax.CallExpr"
_CallExpr_function = Core.Name "function"
_CallExpr_args = Core.Name "args"
-- | A method call expression
data MethodCallExpr =
MethodCallExpr {
-- | The receiver expression
methodCallExprReceiver :: Expression,
-- | The method name
methodCallExprMethod :: String,
-- | Optional turbofish generic arguments
methodCallExprTurbofish :: [Type],
-- | The arguments (excluding the receiver)
methodCallExprArgs :: [Expression]}
deriving (Eq, Ord, Read, Show)
_MethodCallExpr = Core.Name "hydra.rust.syntax.MethodCallExpr"
_MethodCallExpr_receiver = Core.Name "receiver"
_MethodCallExpr_method = Core.Name "method"
_MethodCallExpr_turbofish = Core.Name "turbofish"
_MethodCallExpr_args = Core.Name "args"
-- | A field access expression
data FieldAccessExpr =
FieldAccessExpr {
-- | The expression being accessed
fieldAccessExprObject :: Expression,
-- | The field name
fieldAccessExprField :: String}
deriving (Eq, Ord, Read, Show)
_FieldAccessExpr = Core.Name "hydra.rust.syntax.FieldAccessExpr"
_FieldAccessExpr_object = Core.Name "object"
_FieldAccessExpr_field = Core.Name "field"
-- | A tuple index expression
data TupleIndexExpr =
TupleIndexExpr {
-- | The tuple expression
tupleIndexExprTuple :: Expression,
-- | The index (0-based)
tupleIndexExprIndex :: Int}
deriving (Eq, Ord, Read, Show)
_TupleIndexExpr = Core.Name "hydra.rust.syntax.TupleIndexExpr"
_TupleIndexExpr_tuple = Core.Name "tuple"
_TupleIndexExpr_index = Core.Name "index"
-- | A closure expression
data ClosureExpr =
ClosureExpr {
-- | Whether the closure captures by move
closureExprMove :: Bool,
-- | The closure parameters
closureExprParams :: [ClosureParam],
-- | Optional return type annotation
closureExprReturnType :: (Maybe Type),
-- | The closure body
closureExprBody :: Expression}
deriving (Eq, Ord, Read, Show)
_ClosureExpr = Core.Name "hydra.rust.syntax.ClosureExpr"
_ClosureExpr_move = Core.Name "move"
_ClosureExpr_params = Core.Name "params"
_ClosureExpr_returnType = Core.Name "returnType"
_ClosureExpr_body = Core.Name "body"
-- | A closure parameter
data ClosureParam =
ClosureParam {
-- | The parameter pattern
closureParamPattern :: Pattern,
-- | Optional type annotation
closureParamType :: (Maybe Type)}
deriving (Eq, Ord, Read, Show)
_ClosureParam = Core.Name "hydra.rust.syntax.ClosureParam"
_ClosureParam_pattern = Core.Name "pattern"
_ClosureParam_type = Core.Name "type"
-- | An if expression, optionally with if let
data IfExpr =
IfExpr {
-- | The condition
ifExprCondition :: IfCondition,
-- | The then block
ifExprThenBlock :: Block,
-- | An optional else branch
ifExprElseBranch :: (Maybe Expression)}
deriving (Eq, Ord, Read, Show)
_IfExpr = Core.Name "hydra.rust.syntax.IfExpr"
_IfExpr_condition = Core.Name "condition"
_IfExpr_thenBlock = Core.Name "thenBlock"
_IfExpr_elseBranch = Core.Name "elseBranch"
-- | The condition of an if expression
data IfCondition =
-- | A boolean condition
IfConditionBool Expression |
-- | A let condition
IfConditionLet LetCondition
deriving (Eq, Ord, Read, Show)
_IfCondition = Core.Name "hydra.rust.syntax.IfCondition"
_IfCondition_bool = Core.Name "bool"
_IfCondition_let = Core.Name "let"
-- | A match expression
data MatchExpr =
MatchExpr {
-- | The expression being matched
matchExprScrutinee :: Expression,
-- | The match arms
matchExprArms :: [MatchArm]}
deriving (Eq, Ord, Read, Show)
_MatchExpr = Core.Name "hydra.rust.syntax.MatchExpr"
_MatchExpr_scrutinee = Core.Name "scrutinee"
_MatchExpr_arms = Core.Name "arms"
-- | A single arm in a match expression
data MatchArm =
MatchArm {
-- | The pattern to match
matchArmPattern :: Pattern,
-- | Optional guard expression
matchArmGuard :: (Maybe Expression),
-- | The body expression
matchArmBody :: Expression}
deriving (Eq, Ord, Read, Show)
_MatchArm = Core.Name "hydra.rust.syntax.MatchArm"
_MatchArm_pattern = Core.Name "pattern"
_MatchArm_guard = Core.Name "guard"
_MatchArm_body = Core.Name "body"
-- | A loop expression
data LoopExpr =
LoopExpr {
-- | Optional loop label
loopExprLabel :: (Maybe String),
-- | The loop body
loopExprBody :: Block}
deriving (Eq, Ord, Read, Show)
_LoopExpr = Core.Name "hydra.rust.syntax.LoopExpr"
_LoopExpr_label = Core.Name "label"
_LoopExpr_body = Core.Name "body"
-- | A while expression, optionally with while let
data WhileExpr =
WhileExpr {
-- | Optional loop label
whileExprLabel :: (Maybe String),
-- | The condition
whileExprCondition :: IfCondition,
-- | The loop body
whileExprBody :: Block}
deriving (Eq, Ord, Read, Show)
_WhileExpr = Core.Name "hydra.rust.syntax.WhileExpr"
_WhileExpr_label = Core.Name "label"
_WhileExpr_condition = Core.Name "condition"
_WhileExpr_body = Core.Name "body"
-- | A for expression
data ForExpr =
ForExpr {
-- | Optional loop label
forExprLabel :: (Maybe String),
-- | The loop variable pattern
forExprPattern :: Pattern,
-- | The iterator expression
forExprIter :: Expression,
-- | The loop body
forExprBody :: Block}
deriving (Eq, Ord, Read, Show)
_ForExpr = Core.Name "hydra.rust.syntax.ForExpr"
_ForExpr_label = Core.Name "label"
_ForExpr_pattern = Core.Name "pattern"
_ForExpr_iter = Core.Name "iter"
_ForExpr_body = Core.Name "body"
-- | A binary operation
data BinaryExpr =
BinaryExpr {
-- | The left-hand operand
binaryExprLeft :: Expression,
-- | The binary operator
binaryExprOp :: BinaryOp,
-- | The right-hand operand
binaryExprRight :: Expression}
deriving (Eq, Ord, Read, Show)
_BinaryExpr = Core.Name "hydra.rust.syntax.BinaryExpr"
_BinaryExpr_left = Core.Name "left"
_BinaryExpr_op = Core.Name "op"
_BinaryExpr_right = Core.Name "right"
-- | A binary operator
data BinaryOp =
BinaryOpAdd |
BinaryOpSub |
BinaryOpMul |
BinaryOpDiv |
BinaryOpRem |
BinaryOpAnd |
BinaryOpOr |
BinaryOpBitAnd |
BinaryOpBitOr |
BinaryOpBitXor |
BinaryOpShl |
BinaryOpShr |
BinaryOpEq |
BinaryOpNe |
BinaryOpLt |
BinaryOpLe |
BinaryOpGt |
BinaryOpGe
deriving (Eq, Ord, Read, Show)
_BinaryOp = Core.Name "hydra.rust.syntax.BinaryOp"
_BinaryOp_add = Core.Name "add"
_BinaryOp_sub = Core.Name "sub"
_BinaryOp_mul = Core.Name "mul"
_BinaryOp_div = Core.Name "div"
_BinaryOp_rem = Core.Name "rem"
_BinaryOp_and = Core.Name "and"
_BinaryOp_or = Core.Name "or"
_BinaryOp_bitAnd = Core.Name "bitAnd"
_BinaryOp_bitOr = Core.Name "bitOr"
_BinaryOp_bitXor = Core.Name "bitXor"
_BinaryOp_shl = Core.Name "shl"
_BinaryOp_shr = Core.Name "shr"
_BinaryOp_eq = Core.Name "eq"
_BinaryOp_ne = Core.Name "ne"
_BinaryOp_lt = Core.Name "lt"
_BinaryOp_le = Core.Name "le"
_BinaryOp_gt = Core.Name "gt"
_BinaryOp_ge = Core.Name "ge"
-- | A unary operation
data UnaryExpr =
UnaryExpr {
-- | The unary operator
unaryExprOp :: UnaryOp,
-- | The operand
unaryExprOperand :: Expression}
deriving (Eq, Ord, Read, Show)
_UnaryExpr = Core.Name "hydra.rust.syntax.UnaryExpr"
_UnaryExpr_op = Core.Name "op"
_UnaryExpr_operand = Core.Name "operand"
-- | A unary operator
data UnaryOp =
UnaryOpNeg |
UnaryOpNot
deriving (Eq, Ord, Read, Show)
_UnaryOp = Core.Name "hydra.rust.syntax.UnaryOp"
_UnaryOp_neg = Core.Name "neg"
_UnaryOp_not = Core.Name "not"
-- | A reference expression
data RefExpr =
RefExpr {
-- | Whether the reference is mutable
refExprMutable :: Bool,
-- | The expression being referenced
refExprExpr :: Expression}
deriving (Eq, Ord, Read, Show)
_RefExpr = Core.Name "hydra.rust.syntax.RefExpr"
_RefExpr_mutable = Core.Name "mutable"
_RefExpr_expr = Core.Name "expr"
-- | A struct literal expression
data StructExpr =
StructExpr {
-- | The struct path
structExprPath :: ExprPath,
-- | The field assignments
structExprFields :: [FieldValue],
-- | Optional base expression for struct update syntax
structExprRest :: (Maybe Expression)}
deriving (Eq, Ord, Read, Show)
_StructExpr = Core.Name "hydra.rust.syntax.StructExpr"
_StructExpr_path = Core.Name "path"
_StructExpr_fields = Core.Name "fields"
_StructExpr_rest = Core.Name "rest"
-- | A field-value pair in a struct literal
data FieldValue =
FieldValue {
-- | The field name
fieldValueName :: String,
-- | The field value (None for shorthand syntax)
fieldValueValue :: (Maybe Expression)}
deriving (Eq, Ord, Read, Show)
_FieldValue = Core.Name "hydra.rust.syntax.FieldValue"
_FieldValue_name = Core.Name "name"
_FieldValue_value = Core.Name "value"
-- | An array expression
data ArrayExpr =
-- | An array literal
ArrayExprElements [Expression] |
-- | An array repeat expression
ArrayExprRepeat ArrayRepeat
deriving (Eq, Ord, Read, Show)
_ArrayExpr = Core.Name "hydra.rust.syntax.ArrayExpr"
_ArrayExpr_elements = Core.Name "elements"
_ArrayExpr_repeat = Core.Name "repeat"
-- | An index expression
data IndexExpr =
IndexExpr {
-- | The expression being indexed
indexExprObject :: Expression,
-- | The index expression
indexExprIndex :: Expression}
deriving (Eq, Ord, Read, Show)
_IndexExpr = Core.Name "hydra.rust.syntax.IndexExpr"
_IndexExpr_object = Core.Name "object"
_IndexExpr_index = Core.Name "index"
-- | A range expression
data RangeExpr =
RangeExpr {
-- | The lower bound (optional)
rangeExprFrom :: (Maybe Expression),
-- | The upper bound (optional)
rangeExprTo :: (Maybe Expression),
-- | Whether the range is inclusive
rangeExprInclusive :: Bool}
deriving (Eq, Ord, Read, Show)
_RangeExpr = Core.Name "hydra.rust.syntax.RangeExpr"
_RangeExpr_from = Core.Name "from"
_RangeExpr_to = Core.Name "to"
_RangeExpr_inclusive = Core.Name "inclusive"
-- | A type cast expression
data CastExpr =
CastExpr {
-- | The expression being cast
castExprExpr :: Expression,
-- | The target type
castExprType :: Type}
deriving (Eq, Ord, Read, Show)
_CastExpr = Core.Name "hydra.rust.syntax.CastExpr"
_CastExpr_expr = Core.Name "expr"
_CastExpr_type = Core.Name "type"
-- | A type ascription expression
data TypeAscriptionExpr =
TypeAscriptionExpr {
-- | The expression
typeAscriptionExprExpr :: Expression,
-- | The ascribed type
typeAscriptionExprType :: Type}
deriving (Eq, Ord, Read, Show)
_TypeAscriptionExpr = Core.Name "hydra.rust.syntax.TypeAscriptionExpr"
_TypeAscriptionExpr_expr = Core.Name "expr"
_TypeAscriptionExpr_type = Core.Name "type"
-- | An assignment expression
data AssignExpr =
AssignExpr {
-- | The left-hand side (target)
assignExprTarget :: Expression,
-- | The right-hand side (value)
assignExprValue :: Expression}
deriving (Eq, Ord, Read, Show)
_AssignExpr = Core.Name "hydra.rust.syntax.AssignExpr"
_AssignExpr_target = Core.Name "target"
_AssignExpr_value = Core.Name "value"
-- | A compound assignment expression
data CompoundAssignExpr =
CompoundAssignExpr {
-- | The left-hand side (target)
compoundAssignExprTarget :: Expression,
-- | The compound assignment operator
compoundAssignExprOp :: CompoundAssignOp,
-- | The right-hand side (value)
compoundAssignExprValue :: Expression}
deriving (Eq, Ord, Read, Show)
_CompoundAssignExpr = Core.Name "hydra.rust.syntax.CompoundAssignExpr"
_CompoundAssignExpr_target = Core.Name "target"
_CompoundAssignExpr_op = Core.Name "op"
_CompoundAssignExpr_value = Core.Name "value"
-- | A compound assignment operator
data CompoundAssignOp =
CompoundAssignOpAddAssign |
CompoundAssignOpSubAssign |
CompoundAssignOpMulAssign |
CompoundAssignOpDivAssign |
CompoundAssignOpRemAssign |
CompoundAssignOpBitAndAssign |
CompoundAssignOpBitOrAssign |
CompoundAssignOpBitXorAssign |
CompoundAssignOpShlAssign |
CompoundAssignOpShrAssign
deriving (Eq, Ord, Read, Show)
_CompoundAssignOp = Core.Name "hydra.rust.syntax.CompoundAssignOp"
_CompoundAssignOp_addAssign = Core.Name "addAssign"
_CompoundAssignOp_subAssign = Core.Name "subAssign"
_CompoundAssignOp_mulAssign = Core.Name "mulAssign"
_CompoundAssignOp_divAssign = Core.Name "divAssign"
_CompoundAssignOp_remAssign = Core.Name "remAssign"
_CompoundAssignOp_bitAndAssign = Core.Name "bitAndAssign"
_CompoundAssignOp_bitOrAssign = Core.Name "bitOrAssign"
_CompoundAssignOp_bitXorAssign = Core.Name "bitXorAssign"
_CompoundAssignOp_shlAssign = Core.Name "shlAssign"
_CompoundAssignOp_shrAssign = Core.Name "shrAssign"
-- | A macro invocation
data MacroInvocation =
MacroInvocation {
-- | The macro path
macroInvocationPath :: [String],
-- | The delimiter style used
macroInvocationDelimiter :: MacroDelimiter,
-- | The token stream as a raw string
macroInvocationTokens :: String}
deriving (Eq, Ord, Read, Show)
_MacroInvocation = Core.Name "hydra.rust.syntax.MacroInvocation"
_MacroInvocation_path = Core.Name "path"
_MacroInvocation_delimiter = Core.Name "delimiter"
_MacroInvocation_tokens = Core.Name "tokens"
-- | The delimiter style for a macro invocation
data MacroDelimiter =
MacroDelimiterParen |
MacroDelimiterBracket |
MacroDelimiterBrace
deriving (Eq, Ord, Read, Show)
_MacroDelimiter = Core.Name "hydra.rust.syntax.MacroDelimiter"
_MacroDelimiter_paren = Core.Name "paren"
_MacroDelimiter_bracket = Core.Name "bracket"
_MacroDelimiter_brace = Core.Name "brace"
-- | A statement within a block
data Statement =
-- | A let binding
StatementLet LetStatement |
-- | An expression statement
StatementExpression Expression |
-- | An item declaration within a block
StatementItem Item |
-- | An empty statement
StatementEmpty
deriving (Eq, Ord, Read, Show)
_Statement = Core.Name "hydra.rust.syntax.Statement"
_Statement_let = Core.Name "let"
_Statement_expression = Core.Name "expression"
_Statement_item = Core.Name "item"
_Statement_empty = Core.Name "empty"
-- | A let statement
data LetStatement =
LetStatement {
-- | The binding pattern
letStatementPattern :: Pattern,
-- | Whether the binding is mutable
letStatementMutable :: Bool,
-- | Optional type annotation
letStatementType :: (Maybe Type),
-- | Optional initializer expression
letStatementInit :: (Maybe Expression)}
deriving (Eq, Ord, Read, Show)
_LetStatement = Core.Name "hydra.rust.syntax.LetStatement"
_LetStatement_pattern = Core.Name "pattern"
_LetStatement_mutable = Core.Name "mutable"
_LetStatement_type = Core.Name "type"
_LetStatement_init = Core.Name "init"
-- | A block expression
data Block =
Block {
-- | The statements in the block
blockStatements :: [Statement],
-- | An optional trailing expression
blockExpression :: (Maybe Expression)}
deriving (Eq, Ord, Read, Show)
_Block = Core.Name "hydra.rust.syntax.Block"
_Block_statements = Core.Name "statements"
_Block_expression = Core.Name "expression"
-- | A Rust pattern (used in let, match, function parameters, etc.)
data Pattern =
-- | A wildcard pattern (_)
PatternWildcard |
-- | An identifier pattern
PatternIdentifier IdentifierPattern |
-- | A literal pattern
PatternLiteral Literal |
-- | A reference pattern
PatternReference RefPattern |
-- | A struct pattern
PatternStruct StructPattern |
-- | A tuple struct pattern
PatternTupleStruct TupleStructPattern |
-- | A tuple pattern
PatternTuple [Pattern] |
-- | A slice pattern
PatternSlice [Pattern] |
-- | An or-pattern
PatternOr [Pattern] |
-- | A path pattern
PatternPath ExprPath |
-- | A range pattern
PatternRange RangePattern |
-- | A rest pattern (..)
PatternRest |
-- | A parenthesized pattern
PatternParen Pattern
deriving (Eq, Ord, Read, Show)
_Pattern = Core.Name "hydra.rust.syntax.Pattern"
_Pattern_wildcard = Core.Name "wildcard"
_Pattern_identifier = Core.Name "identifier"
_Pattern_literal = Core.Name "literal"
_Pattern_reference = Core.Name "reference"
_Pattern_struct = Core.Name "struct"
_Pattern_tupleStruct = Core.Name "tupleStruct"
_Pattern_tuple = Core.Name "tuple"
_Pattern_slice = Core.Name "slice"
_Pattern_or = Core.Name "or"
_Pattern_path = Core.Name "path"
_Pattern_range = Core.Name "range"
_Pattern_rest = Core.Name "rest"
_Pattern_paren = Core.Name "paren"
-- | An identifier pattern
data IdentifierPattern =
IdentifierPattern {
-- | The identifier name
identifierPatternName :: String,
-- | Whether the binding is mutable
identifierPatternMutable :: Bool,
-- | Optional sub-pattern (e.g., x @ Some(_))
identifierPatternAtPattern :: (Maybe Pattern)}
deriving (Eq, Ord, Read, Show)
_IdentifierPattern = Core.Name "hydra.rust.syntax.IdentifierPattern"
_IdentifierPattern_name = Core.Name "name"
_IdentifierPattern_mutable = Core.Name "mutable"
_IdentifierPattern_atPattern = Core.Name "atPattern"
-- | A reference pattern
data RefPattern =
RefPattern {
-- | Whether the reference is mutable
refPatternMutable :: Bool,
-- | The inner pattern
refPatternPattern :: Pattern}
deriving (Eq, Ord, Read, Show)
_RefPattern = Core.Name "hydra.rust.syntax.RefPattern"
_RefPattern_mutable = Core.Name "mutable"
_RefPattern_pattern = Core.Name "pattern"
-- | A struct pattern
data StructPattern =
StructPattern {
-- | The struct path
structPatternPath :: ExprPath,
-- | The field patterns
structPatternFields :: [FieldPattern],
-- | Whether the pattern has a rest (..) at the end
structPatternRest :: Bool}
deriving (Eq, Ord, Read, Show)
_StructPattern = Core.Name "hydra.rust.syntax.StructPattern"
_StructPattern_path = Core.Name "path"
_StructPattern_fields = Core.Name "fields"
_StructPattern_rest = Core.Name "rest"
-- | A field pattern within a struct pattern
data FieldPattern =
FieldPattern {
-- | The field name
fieldPatternName :: String,
-- | The field pattern (None for shorthand)
fieldPatternPattern :: (Maybe Pattern)}
deriving (Eq, Ord, Read, Show)
_FieldPattern = Core.Name "hydra.rust.syntax.FieldPattern"
_FieldPattern_name = Core.Name "name"
_FieldPattern_pattern = Core.Name "pattern"
-- | A tuple struct pattern
data TupleStructPattern =
TupleStructPattern {
-- | The path to the tuple struct or variant
tupleStructPatternPath :: ExprPath,
-- | The element patterns
tupleStructPatternElements :: [Pattern]}
deriving (Eq, Ord, Read, Show)
_TupleStructPattern = Core.Name "hydra.rust.syntax.TupleStructPattern"
_TupleStructPattern_path = Core.Name "path"
_TupleStructPattern_elements = Core.Name "elements"
-- | A range pattern
data RangePattern =
RangePattern {
-- | The lower bound
rangePatternFrom :: (Maybe Pattern),
-- | The upper bound
rangePatternTo :: (Maybe Pattern),
-- | Whether the range is inclusive
rangePatternInclusive :: Bool}
deriving (Eq, Ord, Read, Show)
_RangePattern = Core.Name "hydra.rust.syntax.RangePattern"
_RangePattern_from = Core.Name "from"
_RangePattern_to = Core.Name "to"
_RangePattern_inclusive = Core.Name "inclusive"
-- | A literal value
data Literal =
-- | An integer literal
LiteralInteger IntegerLiteral |
-- | A floating-point literal
LiteralFloat FloatLiteral |
-- | A string literal
LiteralString String |
-- | A raw string literal
LiteralRawString String |
-- | A byte string literal
LiteralByteString B.ByteString |
-- | A character literal
LiteralChar I.Int64 |
-- | A byte literal
LiteralByte I.Int16 |
-- | A boolean literal
LiteralBool Bool
deriving (Eq, Ord, Read, Show)
_Literal = Core.Name "hydra.rust.syntax.Literal"
_Literal_integer = Core.Name "integer"
_Literal_float = Core.Name "float"
_Literal_string = Core.Name "string"
_Literal_rawString = Core.Name "rawString"
_Literal_byteString = Core.Name "byteString"
_Literal_char = Core.Name "char"
_Literal_byte = Core.Name "byte"
_Literal_bool = Core.Name "bool"
-- | An integer literal with optional suffix
data IntegerLiteral =
IntegerLiteral {
-- | The integer value
integerLiteralValue :: Integer,
-- | Optional type suffix
integerLiteralSuffix :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_IntegerLiteral = Core.Name "hydra.rust.syntax.IntegerLiteral"
_IntegerLiteral_value = Core.Name "value"
_IntegerLiteral_suffix = Core.Name "suffix"
-- | A floating-point literal with optional suffix
data FloatLiteral =
FloatLiteral {
-- | The float value
floatLiteralValue :: Double,
-- | Optional type suffix
floatLiteralSuffix :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_FloatLiteral = Core.Name "hydra.rust.syntax.FloatLiteral"
_FloatLiteral_value = Core.Name "value"
_FloatLiteral_suffix = Core.Name "suffix"
-- | An attribute (e.g., #[derive(Clone)], #[cfg(test)])
data Attribute =
Attribute {
-- | Whether the attribute is an inner attribute (#![...] vs #[...])
attributeInner :: Bool,
-- | The attribute path
attributePath :: [String],
-- | The attribute arguments as a raw token string
attributeTokens :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_Attribute = Core.Name "hydra.rust.syntax.Attribute"
_Attribute_inner = Core.Name "inner"
_Attribute_path = Core.Name "path"
_Attribute_tokens = Core.Name "tokens"
-- | A visibility qualifier
data Visibility =
-- | Public (pub)
VisibilityPublic |
-- | Crate-visible (pub(crate))
VisibilityCrate |
-- | Visible to a specific path (pub(in path))
VisibilityRestricted [String] |
-- | Private (default)
VisibilityPrivate
deriving (Eq, Ord, Read, Show)
_Visibility = Core.Name "hydra.rust.syntax.Visibility"
_Visibility_public = Core.Name "public"
_Visibility_crate = Core.Name "crate"
_Visibility_restricted = Core.Name "restricted"
_Visibility_private = Core.Name "private"
-- | A let condition (e.g., let Some(x) = opt)
data LetCondition =
LetCondition {
-- | The pattern
letConditionPattern :: Pattern,
-- | The expression being matched
letConditionExpr :: Expression}
deriving (Eq, Ord, Read, Show)
_LetCondition = Core.Name "hydra.rust.syntax.LetCondition"
_LetCondition_pattern = Core.Name "pattern"
_LetCondition_expr = Core.Name "expr"
-- | An array repeat expression (e.g., [0; 10])
data ArrayRepeat =
ArrayRepeat {
-- | The element expression
arrayRepeatElement :: Expression,
-- | The length expression
arrayRepeatLength :: Expression}
deriving (Eq, Ord, Read, Show)
_ArrayRepeat = Core.Name "hydra.rust.syntax.ArrayRepeat"
_ArrayRepeat_element = Core.Name "element"
_ArrayRepeat_length = Core.Name "length"