use std::fs::File; use std::io::Write; use crate::global::{DisplayBuffer, IMG_HEIGHT, IMG_WIDTH}; pub struct View<'a> { pub data: &'a DisplayBuffer, pub viewer: fn(&DisplayBuffer) -> Result, } impl<'a> View<'a> { pub fn display(&self) { let result = (self.viewer)(self.data); match result { Ok(success_msg) => { println!("{}", success_msg); }, Err(error_msg) => { eprintln!("{}", error_msg); } } } } pub mod render_viewer { use super::*; pub fn ppm_exporter(data: &DisplayBuffer) -> Result { let file_name = "output.ppm"; let mut file = File::create(file_name)?; // header let mut txt_data = String::from("P3\n"); txt_data.push_str(format!("{} {}\n255\n", IMG_WIDTH, IMG_HEIGHT).as_str()); // data point data.iter().for_each(|row| { row.iter().for_each(|&pixel| { txt_data.push_str(&format!("{} {} {}\n", pixel.r, pixel.g, pixel.b)); }) }); file.write_all(txt_data.as_bytes())?; Ok(format!("Output rendered to file {}", file_name)) } }