icu_lib/endecoder/
mod.rs

1pub mod common;
2pub mod lvgl;
3pub mod raw;
4pub mod utils;
5
6use crate::midata::MiData;
7use crate::EncoderParams;
8use serde::Serialize;
9
10#[derive(Debug, Serialize)]
11pub struct ImageInfo {
12    pub width: u32,
13    pub height: u32,
14    pub data_size: u32,
15    pub format: String,
16
17    pub other_info: serde_json::Value,
18}
19
20pub trait EnDecoder {
21    fn can_decode(&self, data: &[u8]) -> bool;
22    fn encode(&self, data: &MiData, encoder_params: EncoderParams) -> Vec<u8>;
23    fn decode(&self, data: Vec<u8>) -> MiData;
24
25    fn info(&self, data: &[u8]) -> ImageInfo;
26}
27
28pub fn find_endecoder(data: &[u8]) -> Option<&'static dyn EnDecoder> {
29    let eds = vec![
30        &common::AutoDetect {} as &dyn EnDecoder,
31        &lvgl::LVGL {} as &dyn EnDecoder,
32    ];
33
34    for ed in eds {
35        let can_decode = ed.can_decode(data);
36        if can_decode {
37            return Some(ed);
38        }
39    }
40
41    None
42}