aldrin_parser/ast/
import_stmt.rs

1use super::SchemaName;
2use crate::error::ImportNotFound;
3use crate::grammar::Rule;
4use crate::validate::Validate;
5use crate::warning::UnusedImport;
6use crate::Span;
7use pest::iterators::Pair;
8
9#[derive(Debug, Clone)]
10pub struct ImportStmt {
11    span: Span,
12    schema_name: SchemaName,
13}
14
15impl ImportStmt {
16    pub(crate) fn parse(pair: Pair<Rule>) -> Self {
17        assert_eq!(pair.as_rule(), Rule::import_stmt);
18
19        let span = Span::from_pair(&pair);
20
21        let mut pairs = pair.into_inner();
22        pairs.next().unwrap(); // Skip keyword
23
24        let pair = pairs.next().unwrap();
25        let schema_name = SchemaName::parse(pair);
26
27        Self { span, schema_name }
28    }
29
30    pub(crate) fn validate(&self, validate: &mut Validate) {
31        ImportNotFound::validate(self, validate);
32        UnusedImport::validate(self, validate);
33    }
34
35    pub fn span(&self) -> Span {
36        self.span
37    }
38
39    pub fn schema_name(&self) -> &SchemaName {
40        &self.schema_name
41    }
42}