Skip to main content

microcad_lang/parse/
module.rs

1// Copyright © 2025-2026 The µcad authors <info@microcad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4use 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}