composure/models/common/
type_field.rs1use 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}