From 4250ef35134b9a090cd14ca85c560b2c966b553e Mon Sep 17 00:00:00 2001 From: Rosyid Haryadi Date: Wed, 26 Feb 2025 13:25:47 +0700 Subject: refactor: files separation --- src/main.rs | 65 ++++++++----------------------------------------------------- 1 file changed, 8 insertions(+), 57 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index f81c5a7..36af9b0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,72 +1,23 @@ -use std::fs::File; -use std::io::Write; - -const IMG_WIDTH: usize = 256; -const IMG_HEIGHT: usize = 256; - -type DisplayBuffer = [[Pixel; IMG_WIDTH]; IMG_HEIGHT]; - -#[derive(Debug, Copy, Clone)] -struct Pixel { - r: u8, - g: u8, - b: u8, -} - -impl Default for Pixel { - fn default() -> Self { - Pixel { r:0, g:0, b:0 } - } -} +mod view; +mod global; -struct View<'a> { - data: &'a DisplayBuffer, - viewer: fn(&DisplayBuffer) -> Result, -} - -impl<'a> View<'a> { - fn display(&self) { - let result = (self.viewer)(self.data); - match result { - Ok(success_msg) => { - println!("{}", success_msg); - }, - Err(error_msg) => { - eprintln!("{}", error_msg); - } - } - } -} - -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)) -} +use crate::global::*; +use crate::view::{View, render_viewer}; +use std::io::Write; fn main() { let mut data: DisplayBuffer = [[Pixel::default(); IMG_WIDTH]; IMG_HEIGHT]; - render_gradient(&mut data); + test_render(&mut data); let view = View { data: &data, - viewer: ppm_exporter, + viewer: render_viewer::ppm_exporter, }; view.display(); } -fn render_gradient(data: &mut DisplayBuffer) { +fn test_render(data: &mut DisplayBuffer) { (0..IMG_HEIGHT).for_each(|j| { (0..IMG_WIDTH).for_each(|i| { let r = i as f32 / IMG_WIDTH as f32; -- cgit v1.2.3-70-g09d2