#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#[cfg(feature = "read-archive")]
mod archive;
#[cfg(feature = "read-archive")]
pub use archive::*;
use typst::diag::EcoString;
use typst::syntax::package::{PackageSpec, PackageVersion};
#[derive(Debug, Clone)]
pub struct Package {
pub namespace: &'static str,
pub name: &'static str,
pub version: PackageVersion,
pub archive: &'static [u8],
}
impl Package {
pub fn spec(&self) -> PackageSpec {
PackageSpec {
namespace: EcoString::from(self.namespace),
name: EcoString::from(self.name),
version: self.version,
}
}
}
#[doc(hidden)]
pub mod __private {
pub use typst::syntax::package::PackageVersion;
}
#[macro_export]
macro_rules! include_package {
(
$root:literal $namespace:literal $name:literal ($major:literal, $minor:literal, $patch:literal)
) => {
$crate::Package {
namespace: $namespace,
name: $name,
version: $crate::__private::PackageVersion {
major: $major,
minor: $minor,
patch: $patch,
},
archive: include_bytes!(concat!(
$root,
"/",
$namespace,
"/",
$name,
"-",
stringify!($major),
".",
stringify!($minor),
".",
stringify!($patch),
".tar.gz"
)),
}
};
(
$root:literal
[
$( $namespace:literal $name:literal ($major:literal, $minor:literal, $patch:literal) ),* $(,)?
]
) => {
[
$(
$crate::include_package!($root $namespace $name ($major, $minor, $patch) )
),*
]
};
}