diff options
Diffstat (limited to 'src/handlers/export.rs')
| -rw-r--r-- | src/handlers/export.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/handlers/export.rs b/src/handlers/export.rs new file mode 100644 index 0000000..7438ef9 --- /dev/null +++ b/src/handlers/export.rs @@ -0,0 +1,26 @@ +use std::path::PathBuf; + +use crate::AppModel; +use crate::actions::ImageFormat; +use crate::dialogs; +use wmap_renderer::{render_to_png, render_to_svg}; + +/// Exports the map to an image file in the specified format. +pub fn export_to_file(model: &AppModel, path: PathBuf, format: ImageFormat) { + let result: Result<(), String> = match format { + ImageFormat::Png => { + render_to_png(&model.map, model.stage_type, &model.render_configuration) + .map_err(|e| e.to_string()) + .and_then(|data| std::fs::write(&path, data).map_err(|e| e.to_string())) + } + ImageFormat::Svg => { + render_to_svg(&model.map, model.stage_type, &model.render_configuration) + .map_err(|e| e.to_string()) + .and_then(|data| std::fs::write(&path, data).map_err(|e| e.to_string())) + } + }; + + if let Err(error) = result { + dialogs::show_error(&model.window, "Error Exporting Image", &error); + } +} |