composure/models/common/
type_field.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug)]
4pub struct TypeField<const T: u8>;
5
6impl<const T: u8> Serialize for TypeField<T> {
7    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
8    where
9        S: serde::Serializer,
10    {
11        serializer.serialize_u8(T)
12    }
13}
14
15impl<'de, const T: u8> Deserialize<'de> for TypeField<T> {
16    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
17    where
18        D: serde::Deserializer<'de>,
19    {
20        let value = u8::deserialize(deserializer)?;
21        if value == T {
22            Ok(TypeField::<T>)
23        } else {
24            Err(serde::de::Error::custom("not an option type"))
25        }
26    }
27}