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}