icu_lib/endecoder/
mod.rs

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