microcad_lang/parse/
module.rs1use crate::{parse::*, parser::*, syntax::*};
5use microcad_syntax::ast;
6
7impl FromAst for ModuleDefinition {
8 type AstNode = ast::ModuleDefinition;
9
10 fn from_ast(node: &Self::AstNode, context: &ParseContext) -> Result<Self, ParseError> {
11 Ok(ModuleDefinition {
12 keyword_ref: context.src_ref(&node.keyword_span),
13 doc: node.doc.as_ref().map(|doc| DocBlock::from_ast(doc, context)).transpose()?,
14 visibility: node
15 .visibility
16 .as_ref()
17 .map(|visibility| Visibility::from_ast(visibility, context))
18 .transpose()?
19 .unwrap_or_default(),
20 id: Identifier::from_ast(&node.name, context)?,
21 body: node
22 .body
23 .as_ref()
24 .map(|body| Body::from_ast(body, context))
25 .transpose()?,
26 })
27 }
28}