use super::Ident;
use crate::common::Span;
use alloc::boxed::Box;
use alloc::vec::Vec;
#[derive(Clone, Debug, PartialEq)]
pub struct ImportDecl {
pub specifiers: Vec<ImportSpecifier>,
pub source: Box<str>,
pub span: Span,
}
#[derive(Clone, Debug, PartialEq)]
#[allow(missing_docs)]
pub enum ImportSpecifier {
Default(Ident),
Namespace(Ident),
Named {
imported: ModuleExportName,
local: Ident,
},
}
#[derive(Clone, Debug, PartialEq)]
#[allow(missing_docs)]
pub enum ModuleExportName {
Ident(Box<str>),
Str(Box<str>),
}
#[derive(Clone, Debug, PartialEq)]
#[allow(missing_docs)]
pub enum ExportDecl {
Named {
specifiers: Vec<ExportSpecifier>,
source: Option<Box<str>>,
span: Span,
},
All {
exported: Option<ModuleExportName>,
source: Box<str>,
span: Span,
},
Default {
declaration: Box<super::Stmt>,
span: Span,
},
Decl {
declaration: Box<super::Stmt>,
span: Span,
},
}
impl ExportDecl {
#[must_use]
pub fn span(&self) -> Span {
match self {
ExportDecl::Named { span, .. }
| ExportDecl::All { span, .. }
| ExportDecl::Default { span, .. }
| ExportDecl::Decl { span, .. } => *span,
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct ExportSpecifier {
pub local: ModuleExportName,
pub exported: ModuleExportName,
pub span: Span,
}