feat(exporters): scaffold PngExporter

This commit is contained in:
2026-03-23 02:30:11 +01:00
parent 4e742d9ebc
commit 0d0627b223
4 changed files with 31 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
use lib::{BlockPalette, StructureExporter, VoxelGrid, VoxelType};
pub struct PngExporter {
palette: BlockPalette,
cell_size: u32,
}
impl PngExporter {
pub fn new(palette: &BlockPalette, cell_size: u32) -> Self {
Self { palette: palette.clone(), cell_size }
}
}
impl StructureExporter for PngExporter {
fn export(&self, _grid: &VoxelGrid) -> anyhow::Result<Vec<u8>> {
todo!("png export not yet implemented")
}
fn file_extension(&self) -> &'static str {
"png"
}
}

View File

@@ -1,8 +1,10 @@
mod image_export;
mod litematica;
mod mcfunction;
use lib::{BlockPalette, StructureExporter};
pub use image_export::PngExporter;
pub use litematica::LitematicaExporter;
pub use mcfunction::McFunctionExporter;
@@ -11,12 +13,17 @@ type ExporterFactory = fn(&BlockPalette) -> Box<dyn StructureExporter>;
const REGISTRY: &[(&str, ExporterFactory)] = &[
("mcfunction", |p| Box::new(McFunctionExporter::new(p))),
("litematica", |p| Box::new(LitematicaExporter::new(p))),
("png", |p| Box::new(PngExporter::new(p, 16))),
];
pub fn available_names() -> Vec<&'static str> {
REGISTRY.iter().map(|(name, _)| *name).collect()
}
pub fn build_png(palette: &BlockPalette, cell_size: u32) -> Box<dyn StructureExporter> {
Box::new(PngExporter::new(palette, cell_size))
}
pub fn build(name: &str, palette: &BlockPalette) -> Option<Box<dyn StructureExporter>> {
REGISTRY.iter()
.find(|(n, _)| *n == name)