// Embedded vendor files
pub static TACHYONS_CSS: &[u8] = include_bytes!("../../vendor/tachyons.css");
pub static FIXI_JS: &[u8] = include_bytes!("../../vendor/the-fixi-project@0.1.1.min.js");
// Embedded skill files
pub static FIXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/fixi/skill.md");
pub static MOXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/moxi/skill.md");
pub static PAXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/paxi/skill.md");
pub static SSEXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/ssexi/skill.md");
pub static REXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/rexi/skill.md");
/// File information for display
pub struct FileInfo {
pub name: &'static str,
pub path: &'static str,
pub size: usize,
}
/// Format file size in human-readable format
pub fn format_size(bytes: usize) -> String {
const KB: usize = 1024;
const MB: usize = KB * 1024;
if bytes >= MB {
format!("{:.2} MB", bytes as f64 / MB as f64)
} else if bytes >= KB {
format!("{:.2} KB", bytes as f64 / KB as f64)
} else {
format!("{} B", bytes)
}
}
/// All files available for download
pub const ALL_FILES: &[FileInfo] = &[
FileInfo {
name: "tachyons.css",
path: "tachyons.css",
size: TACHYONS_CSS.len(),
},
FileInfo {
name: "the-fixi-project@0.1.1.min.js",
path: "the-fixi-project@0.1.1.min.js",
size: FIXI_JS.len(),
},
FileInfo {
name: "fixi.md",
path: "fixi.md",
size: FIXI_SKILL.len(),
},
FileInfo {
name: "moxi.md",
path: "moxi.md",
size: MOXI_SKILL.len(),
},
FileInfo {
name: "paxi.md",
path: "paxi.md",
size: PAXI_SKILL.len(),
},
FileInfo {
name: "ssexi.md",
path: "ssexi.md",
size: SSEXI_SKILL.len(),
},
FileInfo {
name: "rexi.md",
path: "rexi.md",
size: REXI_SKILL.len(),
},
];