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}