use oxc_ast_macros::ast_meta;
use oxc_estree::{ESTree, Serializer};
use oxc_span::Span;
use crate::module_record::NameSpan;
macro_rules! dummy_estree_impl {
($ty:ty) => {
impl ESTree for $ty {
fn serialize<S: Serializer>(&self, _serializer: S) {
unimplemented!();
}
}
};
}
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "
var nameSpan = DESER[NameSpan](POS);
{ kind: 'Name', name: nameSpan.value, start: nameSpan.start, end: nameSpan.end, ...(RANGE && { range: nameSpan.range }) }
"
)]
pub struct ImportOrExportNameName<'a, 'b>(#[expect(dead_code)] pub &'b NameSpan<'a>);
dummy_estree_impl!(ImportOrExportNameName<'_, '_>);
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "
var nameSpan = DESER[NameSpan](POS);
{ kind: 'Default', name: nameSpan.value, start: nameSpan.start, end: nameSpan.end, ...(RANGE && { range: nameSpan.range }) }
"
)]
pub struct ExportLocalNameDefault<'a, 'b>(#[expect(dead_code)] pub &'b NameSpan<'a>);
dummy_estree_impl!(ExportLocalNameDefault<'_, '_>);
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "{ kind: 'None', name: null, start: null, end: null, ...(RANGE && { range: [null, null] }) }"
)]
pub struct ExportNameNull(pub ());
dummy_estree_impl!(ExportNameNull);
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "
var { start, end } = DESER[Span](POS);
{ kind: 'Default', name: null, start, end, ...(RANGE && { range: [start, end] }) }
"
)]
pub struct ImportOrExportNameDefault<'b>(#[expect(dead_code)] pub &'b Span);
dummy_estree_impl!(ImportOrExportNameDefault<'_>);
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "{ kind: 'All', name: null, start: null, end: null, ...(RANGE && { range: [null, null] }) }"
)]
pub struct ExportImportNameAll(pub ());
dummy_estree_impl!(ExportImportNameAll);
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "{ kind: 'AllButDefault', name: null, start: null, end: null, ...(RANGE && { range: [null, null] }) }"
)]
pub struct ExportImportNameAllButDefault(pub ());
dummy_estree_impl!(ExportImportNameAllButDefault);
#[ast_meta]
#[estree(
ts_type = "Dummy",
raw_deser = "{ kind: 'NamespaceObject', name: null, start: null, end: null, ...(RANGE && { range: [null, null] }) }"
)]
pub struct ImportImportNameNamespaceObject(pub ());
dummy_estree_impl!(ImportImportNameNamespaceObject);