From 93676e7bff3f4a2a966221481666ec13a342d4c6 Mon Sep 17 00:00:00 2001 From: mincomk Date: Mon, 2 Jun 2025 16:45:07 +0900 Subject: [PATCH] feat: config system --- .cargo/config.toml | 5 +++++ .gitea/workflows/lint.yaml | 19 +++++++++++++++++++ .gitignore | 3 +++ src/config.rs | 5 +++++ src/enums.rs | 5 +++++ src/error.rs | 8 ++++++++ src/main.rs | 30 +++++++++++++++++++++--------- 7 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 .gitea/workflows/lint.yaml create mode 100644 .gitignore create mode 100644 src/config.rs create mode 100644 src/enums.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..81bf23b --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,5 @@ +[build] +target = "x86_64-unknown-uefi" + +[target.x86_64-unknown-uefi] +runner = "bootuefi" diff --git a/.gitea/workflows/lint.yaml b/.gitea/workflows/lint.yaml new file mode 100644 index 0000000..809311a --- /dev/null +++ b/.gitea/workflows/lint.yaml @@ -0,0 +1,19 @@ +name: Lint +run-name: ${{ gitea.actor }} is linting +on: [push] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + components: rustfmt, clippy + - name: Lint + run: cargo clippy diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af0011 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +/assets +/vm diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..c8608c1 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,5 @@ +use crate::enums::MediaType; + +pub static DATA: &[u8] = include_bytes!("../assets/rainbow.png"); +pub static MEDIA_TYPE: MediaType = MediaType::ImagePNG; +pub static SCALE: f32 = 1.0; diff --git a/src/enums.rs b/src/enums.rs new file mode 100644 index 0000000..ed94b44 --- /dev/null +++ b/src/enums.rs @@ -0,0 +1,5 @@ +#[derive(Debug, Clone)] +pub enum MediaType { + VideoGIF, + ImagePNG, +} diff --git a/src/error.rs b/src/error.rs index 06fe9b8..941e26f 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,3 +1,5 @@ +use core::fmt::Debug; + use alloc::string::{String, ToString}; pub struct RenderError { @@ -13,3 +15,9 @@ impl RenderError { } } } + +impl Debug for RenderError { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.write_fmt(format_args!("[{}] {}", self.ident, self.message)) + } +} diff --git a/src/main.rs b/src/main.rs index 9a2d59d..fc27bc9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,12 +8,16 @@ use codec::{ transform::scale::ScaleTransformer, video::{VideoDecoder, gif::GifDecoder}, }; +use config::{DATA, MEDIA_TYPE, SCALE}; +use enums::MediaType; use graphic::GraphicLoader; use log::info; use uefi::{allocator::Allocator, prelude::*}; mod codec; mod color; +mod config; +mod enums; mod error; mod graphic; mod util; @@ -21,8 +25,6 @@ mod util; #[global_allocator] static ALLOC: Allocator = Allocator; -static IMAGE: &[u8] = include_bytes!("../assets/pet.gif"); - #[entry] fn main() -> Status { uefi::helpers::init().unwrap(); @@ -30,13 +32,23 @@ fn main() -> Status { let gl = GraphicLoader::new(); - let data = GifDecoder.decode(IMAGE); + match MEDIA_TYPE { + MediaType::ImagePNG => { + let data = PngDecoder + .decode(DATA) + .expect("Render Error") + .transform(&ScaleTransformer::new(SCALE)); + gl.render(&data).unwrap(); + } + MediaType::VideoGIF => { + let data = GifDecoder + .decode(DATA) + .expect("Render Error") + .transform(&ScaleTransformer::new(SCALE)); + gl.render_video(&data).unwrap(); + } + }; - if let Ok(data) = data { - let data = data.transform(&ScaleTransformer::new(4.0)); - gl.render_video(&data); - } - - boot::stall(10_000_000); + boot::stall(10_000_000_000); Status::SUCCESS }