use crate::error::MicroError;
use crate::model::Layer;
use crate::package::{Limits, Pack, load_embedded_pack};
static FILES: &[(&str, &[u8])] = include!("../builtin/files.rs");
pub const PACKS: &[&str] = &["status", "dev", "fun"];
pub(crate) fn file(path: &str) -> Option<&'static [u8]> {
FILES
.iter()
.find(|(name, _)| *name == path)
.map(|(_, bytes)| *bytes)
}
pub(crate) fn is_dir(path: &str) -> bool {
let prefix = format!("{path}/");
FILES.iter().any(|(name, _)| name.starts_with(&prefix))
}
pub fn files() -> impl Iterator<Item = &'static str> {
FILES.iter().map(|(name, _)| *name)
}
pub fn packs(layer: Layer) -> Vec<Result<Pack, MicroError>> {
let limits = Limits::default();
PACKS
.iter()
.map(|pack| load_embedded_pack(pack, layer, &limits))
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_pack_loads_whole() {
for pack in packs(Layer::BuiltIn) {
let pack = pack.unwrap();
assert!(pack.rejected.is_empty(), "{:?}", pack.rejected);
assert!(!pack.assets.is_empty());
}
assert!(file("status/pack.json").is_some());
assert!(is_dir("status/success"));
assert!(!is_dir("status/nothing"));
}
}