Skip to main content

gproxy_protocol/openai/common/
mod.rs

1macro_rules! extensible_string_enum {
2    ($outer:ident, $known:ident { $($variant:ident => $wire:literal),+ $(,)? }) => {
3        #[derive(Debug, Clone, PartialEq, Eq)]
4        pub enum $outer {
5            Known($known),
6            Unknown(String),
7        }
8
9        impl $outer {
10            pub fn as_str(&self) -> &str {
11                match self {
12                    Self::Known(known) => known.as_str(),
13                    Self::Unknown(value) => value,
14                }
15            }
16        }
17
18        impl serde::Serialize for $outer {
19            fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20                serializer.serialize_str(self.as_str())
21            }
22        }
23
24        impl<'de> serde::Deserialize<'de> for $outer {
25            fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26                let value = <String as serde::Deserialize>::deserialize(deserializer)?;
27                Ok(match value.as_str() {
28                    $($wire => Self::Known($known::$variant),)+
29                    _ => Self::Unknown(value),
30                })
31            }
32        }
33
34        #[derive(Debug, Clone, PartialEq, Eq)]
35        pub enum $known {
36            $($variant,)+
37        }
38
39        impl $known {
40            pub fn as_str(&self) -> &'static str {
41                match self {
42                    $(Self::$variant => $wire,)+
43                }
44            }
45        }
46
47        impl serde::Serialize for $known {
48            fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
49                serializer.serialize_str(self.as_str())
50            }
51        }
52
53        impl<'de> serde::Deserialize<'de> for $known {
54            fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
55                let value = <String as serde::Deserialize>::deserialize(deserializer)?;
56                match value.as_str() {
57                    $($wire => Ok(Self::$variant),)+
58                    _ => Err(serde::de::Error::unknown_variant(&value, &[$($wire,)+])),
59                }
60            }
61        }
62    };
63}
64
65macro_rules! strict_string_enum {
66    ($outer:ident { $($variant:ident => $wire:literal),+ $(,)? }) => {
67        #[derive(Debug, Clone, PartialEq, Eq)]
68        pub enum $outer {
69            $($variant,)+
70            Unknown(String),
71        }
72
73        impl $outer {
74            pub fn as_str(&self) -> &str {
75                match self {
76                    $(Self::$variant => $wire,)+
77                    Self::Unknown(value) => value,
78                }
79            }
80        }
81
82        impl serde::Serialize for $outer {
83            fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
84                serializer.serialize_str(self.as_str())
85            }
86        }
87
88        impl<'de> serde::Deserialize<'de> for $outer {
89            fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
90                let value = <String as serde::Deserialize>::deserialize(deserializer)?;
91                Ok(match value.as_str() {
92                    $($wire => Self::$variant,)+
93                    _ => Self::Unknown(value),
94                })
95            }
96        }
97    };
98}
99
100mod enums;
101mod formats;
102mod logprobs;
103mod model_ids;
104mod object_types;
105mod tools;
106mod types;
107
108pub use enums::*;
109pub use formats::*;
110pub use logprobs::*;
111pub use model_ids::*;
112pub use object_types::*;
113pub use tools::*;
114pub use types::*;