diff --git a/crates/swc_common/src/plugin.rs b/crates/swc_common/src/plugin.rs index afc77ad33fb6..ff55d2c706ea 100644 --- a/crates/swc_common/src/plugin.rs +++ b/crates/swc_common/src/plugin.rs @@ -4,7 +4,7 @@ //! `swc_common`. #![allow(unused)] -use std::any::type_name; +use std::{any::type_name, mem}; use anyhow::Error; use bytecheck::CheckBytes; @@ -174,4 +174,27 @@ impl Serialized { #[derive(Archive, Deserialize, Serialize)] #[repr(transparent)] #[archive_attr(repr(transparent), derive(CheckBytes))] -pub struct VersionedSerializable(#[with(AsBox)] pub (u32, T)); +pub struct VersionedSerializable(#[with(AsBox)] (u32, T)); + +impl VersionedSerializable { + pub fn new(value: T) -> Self { + // TODO: we'll add compile time flag to augment schema version. + // User should not try to set version by themselves. + VersionedSerializable((1, value)) + } + + pub fn version(&self) -> u32 { + self.0 .0 + } + + pub fn inner(&self) -> &T { + &self.0 .1 + } + + pub fn take(&mut self) -> T + where + T: Default, + { + mem::take(&mut self.0 .1) + } +} diff --git a/crates/swc_ecma_ast/src/module.rs b/crates/swc_ecma_ast/src/module.rs index 4bc570f110a4..838a33bf3350 100644 --- a/crates/swc_ecma_ast/src/module.rs +++ b/crates/swc_ecma_ast/src/module.rs @@ -14,6 +14,12 @@ pub enum Program { Script(Script), } +impl Default for Program { + fn default() -> Self { + Program::Module(Module::dummy()) + } +} + #[ast_node("Module")] #[derive(Eq, Hash, EqIgnoreSpan)] pub struct Module {