miden_assembly_syntax/ast/
form.rs1use alloc::string::String;
2
3use miden_debug_types::{SourceSpan, Span, Spanned};
4
5use super::{
6 AdviceMapEntry, Alias, Block, Constant, EnumType, Export, Procedure, TypeAlias, TypeDecl,
7};
8
9#[derive(Debug, PartialEq, Eq)]
11pub enum Form {
12 ModuleDoc(Span<String>),
14 Doc(Span<String>),
16 Type(TypeAlias),
18 Enum(EnumType),
20 Constant(Constant),
22 Begin(Block),
24 Procedure(Procedure),
26 Alias(Alias),
28 AdviceMapEntry(AdviceMapEntry),
30}
31
32impl From<Span<String>> for Form {
33 fn from(doc: Span<String>) -> Self {
34 Self::Doc(doc)
35 }
36}
37
38impl From<TypeAlias> for Form {
39 fn from(value: TypeAlias) -> Self {
40 Self::Type(value)
41 }
42}
43
44impl From<EnumType> for Form {
45 fn from(value: EnumType) -> Self {
46 Self::Enum(value)
47 }
48}
49
50impl From<Constant> for Form {
51 fn from(constant: Constant) -> Self {
52 Self::Constant(constant)
53 }
54}
55
56impl From<Alias> for Form {
57 fn from(alias: Alias) -> Self {
58 Self::Alias(alias)
59 }
60}
61
62impl From<Block> for Form {
63 fn from(block: Block) -> Self {
64 Self::Begin(block)
65 }
66}
67
68impl From<Export> for Form {
69 fn from(item: Export) -> Self {
70 match item {
71 Export::Alias(item) => Self::Alias(item),
72 Export::Constant(item) => Self::Constant(item),
73 Export::Type(TypeDecl::Alias(item)) => Self::Type(item),
74 Export::Type(TypeDecl::Enum(item)) => Self::Enum(item),
75 Export::Procedure(item) => Self::Procedure(item),
76 }
77 }
78}
79
80impl Spanned for Form {
81 fn span(&self) -> SourceSpan {
82 match self {
83 Self::ModuleDoc(spanned) | Self::Doc(spanned) => spanned.span(),
84 Self::Type(spanned) => spanned.span(),
85 Self::Enum(spanned) => spanned.span(),
86 Self::Constant(Constant { span, .. })
87 | Self::AdviceMapEntry(AdviceMapEntry { span, .. }) => *span,
88 Self::Begin(spanned) => spanned.span(),
89 Self::Procedure(spanned) => spanned.span(),
90 Self::Alias(spanned) => spanned.span(),
91 }
92 }
93}