Skip to main content

micromegas_transit/
string_codec.rs

1use crate::{Reflect, UserDefinedType};
2use lazy_static::lazy_static;
3use std::sync::Arc;
4
5#[repr(u8)]
6#[derive(Eq, PartialEq, Debug, Copy, Clone)]
7pub enum StringCodec {
8    Ansi = 0,
9    Wide = 1,
10    Utf8 = 2,
11}
12
13impl Reflect for StringCodec {
14    fn reflect() -> UserDefinedType {
15        lazy_static! {
16            static ref TYPE_NAME: Arc<String> = Arc::new("StringCodec".into());
17        }
18        UserDefinedType {
19            name: TYPE_NAME.clone(),
20            size: 1,
21            members: vec![],
22            is_reference: false,
23            secondary_udts: vec![],
24        }
25    }
26}
27
28impl TryFrom<u8> for StringCodec {
29    type Error = anyhow::Error;
30
31    fn try_from(value: u8) -> std::result::Result<Self, Self::Error> {
32        match value {
33            0 => Ok(StringCodec::Ansi),
34            1 => Ok(StringCodec::Wide),
35            2 => Ok(StringCodec::Utf8),
36            other => anyhow::bail!("invalid codec id {other}"),
37        }
38    }
39}