miden_assembly_syntax/ast/
form.rs1use alloc::string::String;
2
3use miden_debug_types::{SourceSpan, Span, Spanned};
4
5use super::{AdviceMapEntry, Block, Constant, Export, Import};
6
7#[derive(Debug, PartialEq, Eq)]
9pub enum Form {
10 ModuleDoc(Span<String>),
12 Doc(Span<String>),
14 Import(Import),
16 Constant(Constant),
18 Begin(Block),
20 Procedure(Export),
22 AdviceMapEntry(AdviceMapEntry),
24}
25
26impl From<Span<String>> for Form {
27 fn from(doc: Span<String>) -> Self {
28 Self::Doc(doc)
29 }
30}
31
32impl From<Import> for Form {
33 fn from(import: Import) -> Self {
34 Self::Import(import)
35 }
36}
37
38impl From<Constant> for Form {
39 fn from(constant: Constant) -> Self {
40 Self::Constant(constant)
41 }
42}
43
44impl From<Block> for Form {
45 fn from(block: Block) -> Self {
46 Self::Begin(block)
47 }
48}
49
50impl From<Export> for Form {
51 fn from(export: Export) -> Self {
52 Self::Procedure(export)
53 }
54}
55
56impl Spanned for Form {
57 fn span(&self) -> SourceSpan {
58 match self {
59 Self::ModuleDoc(spanned) | Self::Doc(spanned) => spanned.span(),
60 Self::Import(Import { span, .. })
61 | Self::Constant(Constant { span, .. })
62 | Self::AdviceMapEntry(AdviceMapEntry { span, .. }) => *span,
63 Self::Begin(spanned) => spanned.span(),
64 Self::Procedure(spanned) => spanned.span(),
65 }
66 }
67}