Skip to main content

gproxy_protocol/protocol/gemini/common/
enums.rs

1use serde::{Deserialize, Serialize};
2
3macro_rules! extensible_string_enum {
4    ($outer:ident, $known:ident { $first_variant:ident => $first_wire:literal $(, $variant:ident => $wire:literal)* $(,)? }) => {
5        #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6        #[serde(untagged)]
7        pub enum $outer {
8            Known($known),
9            Unknown(String),
10        }
11
12        #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13        pub enum $known {
14            #[serde(rename = $first_wire)]
15            $first_variant,
16            $(
17                #[serde(rename = $wire)]
18                $variant,
19            )*
20        }
21
22        impl Default for $outer {
23            fn default() -> Self {
24                Self::Known($known::$first_variant)
25            }
26        }
27    };
28}
29
30extensible_string_enum!(ContentRole, ContentRoleKnown {
31    User => "user",
32    Model => "model",
33    System => "system",
34    Function => "function",
35});
36
37extensible_string_enum!(Modality, ModalityKnown {
38    ModalityUnspecified => "MODALITY_UNSPECIFIED",
39    Text => "TEXT",
40    Image => "IMAGE",
41    Video => "VIDEO",
42    Audio => "AUDIO",
43    Document => "DOCUMENT",
44});
45
46extensible_string_enum!(ResponseModality, ResponseModalityKnown {
47    ModalityUnspecified => "MODALITY_UNSPECIFIED",
48    Text => "TEXT",
49    Image => "IMAGE",
50    Audio => "AUDIO",
51});
52
53extensible_string_enum!(ResponseMimeType, ResponseMimeTypeKnown {
54    TextPlain => "text/plain",
55    ApplicationJson => "application/json",
56    TextXEnum => "text/x.enum",
57});
58
59extensible_string_enum!(HarmCategory, HarmCategoryKnown {
60    HarmCategoryUnspecified => "HARM_CATEGORY_UNSPECIFIED",
61    HarmCategoryDerogatory => "HARM_CATEGORY_DEROGATORY",
62    HarmCategoryToxicity => "HARM_CATEGORY_TOXICITY",
63    HarmCategoryViolence => "HARM_CATEGORY_VIOLENCE",
64    HarmCategorySexual => "HARM_CATEGORY_SEXUAL",
65    HarmCategoryMedical => "HARM_CATEGORY_MEDICAL",
66    HarmCategoryDangerous => "HARM_CATEGORY_DANGEROUS",
67    HarmCategoryHarassment => "HARM_CATEGORY_HARASSMENT",
68    HarmCategoryHateSpeech => "HARM_CATEGORY_HATE_SPEECH",
69    HarmCategorySexuallyExplicit => "HARM_CATEGORY_SEXUALLY_EXPLICIT",
70    HarmCategoryDangerousContent => "HARM_CATEGORY_DANGEROUS_CONTENT",
71    HarmCategoryCivicIntegrity => "HARM_CATEGORY_CIVIC_INTEGRITY",
72});
73
74extensible_string_enum!(HarmBlockThreshold, HarmBlockThresholdKnown {
75    HarmBlockThresholdUnspecified => "HARM_BLOCK_THRESHOLD_UNSPECIFIED",
76    BlockLowAndAbove => "BLOCK_LOW_AND_ABOVE",
77    BlockMediumAndAbove => "BLOCK_MEDIUM_AND_ABOVE",
78    BlockOnlyHigh => "BLOCK_ONLY_HIGH",
79    BlockNone => "BLOCK_NONE",
80    Off => "OFF",
81});
82
83extensible_string_enum!(HarmProbability, HarmProbabilityKnown {
84    HarmProbabilityUnspecified => "HARM_PROBABILITY_UNSPECIFIED",
85    Negligible => "NEGLIGIBLE",
86    Low => "LOW",
87    Medium => "MEDIUM",
88    High => "HIGH",
89});
90
91extensible_string_enum!(ServiceTier, ServiceTierKnown {
92    Unspecified => "unspecified",
93    Standard => "standard",
94    Flex => "flex",
95    Priority => "priority",
96});
97
98extensible_string_enum!(FinishReason, FinishReasonKnown {
99    FinishReasonUnspecified => "FINISH_REASON_UNSPECIFIED",
100    Stop => "STOP",
101    MaxTokens => "MAX_TOKENS",
102    Safety => "SAFETY",
103    Recitation => "RECITATION",
104    Language => "LANGUAGE",
105    Other => "OTHER",
106    Blocklist => "BLOCKLIST",
107    ProhibitedContent => "PROHIBITED_CONTENT",
108    Spii => "SPII",
109    MalformedFunctionCall => "MALFORMED_FUNCTION_CALL",
110    ImageSafety => "IMAGE_SAFETY",
111    ImageProhibitedContent => "IMAGE_PROHIBITED_CONTENT",
112    ImageOther => "IMAGE_OTHER",
113    NoImage => "NO_IMAGE",
114    ImageRecitation => "IMAGE_RECITATION",
115    UnexpectedToolCall => "UNEXPECTED_TOOL_CALL",
116    TooManyToolCalls => "TOO_MANY_TOOL_CALLS",
117    MissingThoughtSignature => "MISSING_THOUGHT_SIGNATURE",
118    MalformedResponse => "MALFORMED_RESPONSE",
119});
120
121extensible_string_enum!(BlockReason, BlockReasonKnown {
122    BlockReasonUnspecified => "BLOCK_REASON_UNSPECIFIED",
123    Safety => "SAFETY",
124    Other => "OTHER",
125    Blocklist => "BLOCKLIST",
126    ProhibitedContent => "PROHIBITED_CONTENT",
127    ImageSafety => "IMAGE_SAFETY",
128});
129
130extensible_string_enum!(ModelStage, ModelStageKnown {
131    ModelStageUnspecified => "MODEL_STAGE_UNSPECIFIED",
132    UnstableExperimental => "UNSTABLE_EXPERIMENTAL",
133    Experimental => "EXPERIMENTAL",
134    Preview => "PREVIEW",
135    Stable => "STABLE",
136    Legacy => "LEGACY",
137    Deprecated => "DEPRECATED",
138    Retired => "RETIRED",
139});
140
141extensible_string_enum!(TaskType, TaskTypeKnown {
142    TaskTypeUnspecified => "TASK_TYPE_UNSPECIFIED",
143    RetrievalQuery => "RETRIEVAL_QUERY",
144    RetrievalDocument => "RETRIEVAL_DOCUMENT",
145    SemanticSimilarity => "SEMANTIC_SIMILARITY",
146    Classification => "CLASSIFICATION",
147    Clustering => "CLUSTERING",
148    QuestionAnswering => "QUESTION_ANSWERING",
149    FactVerification => "FACT_VERIFICATION",
150    CodeRetrievalQuery => "CODE_RETRIEVAL_QUERY",
151});
152
153extensible_string_enum!(MediaResolutionLevel, MediaResolutionLevelKnown {
154    MediaResolutionUnspecified => "MEDIA_RESOLUTION_UNSPECIFIED",
155    MediaResolutionLow => "MEDIA_RESOLUTION_LOW",
156    MediaResolutionMedium => "MEDIA_RESOLUTION_MEDIUM",
157    MediaResolutionHigh => "MEDIA_RESOLUTION_HIGH",
158    MediaResolutionUltraHigh => "MEDIA_RESOLUTION_ULTRA_HIGH",
159});
160
161extensible_string_enum!(GenerationMediaResolution, GenerationMediaResolutionKnown {
162    MediaResolutionUnspecified => "MEDIA_RESOLUTION_UNSPECIFIED",
163    MediaResolutionLow => "MEDIA_RESOLUTION_LOW",
164    MediaResolutionMedium => "MEDIA_RESOLUTION_MEDIUM",
165    MediaResolutionHigh => "MEDIA_RESOLUTION_HIGH",
166});
167
168extensible_string_enum!(ThinkingLevel, ThinkingLevelKnown {
169    ThinkingLevelUnspecified => "THINKING_LEVEL_UNSPECIFIED",
170    Minimal => "MINIMAL",
171    Low => "LOW",
172    Medium => "MEDIUM",
173    High => "HIGH",
174});
175
176extensible_string_enum!(FunctionResponseScheduling, FunctionResponseSchedulingKnown {
177    SchedulingUnspecified => "SCHEDULING_UNSPECIFIED",
178    Silent => "SILENT",
179    WhenIdle => "WHEN_IDLE",
180    Interrupt => "INTERRUPT",
181});
182
183extensible_string_enum!(ExecutableCodeLanguage, ExecutableCodeLanguageKnown {
184    LanguageUnspecified => "LANGUAGE_UNSPECIFIED",
185    Python => "PYTHON",
186});
187
188extensible_string_enum!(CodeExecutionOutcome, CodeExecutionOutcomeKnown {
189    OutcomeUnspecified => "OUTCOME_UNSPECIFIED",
190    OutcomeOk => "OUTCOME_OK",
191    OutcomeFailed => "OUTCOME_FAILED",
192    OutcomeDeadlineExceeded => "OUTCOME_DEADLINE_EXCEEDED",
193});
194
195extensible_string_enum!(ServerToolType, ServerToolTypeKnown {
196    ToolTypeUnspecified => "TOOL_TYPE_UNSPECIFIED",
197    GoogleSearchWeb => "GOOGLE_SEARCH_WEB",
198    GoogleSearchImage => "GOOGLE_SEARCH_IMAGE",
199    UrlContext => "URL_CONTEXT",
200    GoogleMaps => "GOOGLE_MAPS",
201    FileSearch => "FILE_SEARCH",
202});
203
204extensible_string_enum!(SchemaType, SchemaTypeKnown {
205    TypeUnspecified => "TYPE_UNSPECIFIED",
206    String => "STRING",
207    Number => "NUMBER",
208    Integer => "INTEGER",
209    Boolean => "BOOLEAN",
210    Array => "ARRAY",
211    Object => "OBJECT",
212    Null => "NULL",
213});
214
215extensible_string_enum!(FunctionBehavior, FunctionBehaviorKnown {
216    Unspecified => "UNSPECIFIED",
217    Blocking => "BLOCKING",
218    NonBlocking => "NON_BLOCKING",
219});
220
221extensible_string_enum!(DynamicRetrievalMode, DynamicRetrievalModeKnown {
222    ModeUnspecified => "MODE_UNSPECIFIED",
223    ModeDynamic => "MODE_DYNAMIC",
224});
225
226extensible_string_enum!(FunctionCallingMode, FunctionCallingModeKnown {
227    ModeUnspecified => "MODE_UNSPECIFIED",
228    Auto => "AUTO",
229    Any => "ANY",
230    None => "NONE",
231    Validated => "VALIDATED",
232});
233
234extensible_string_enum!(ComputerUseEnvironment, ComputerUseEnvironmentKnown {
235    EnvironmentUnspecified => "ENVIRONMENT_UNSPECIFIED",
236    EnvironmentBrowser => "ENVIRONMENT_BROWSER",
237});
238
239extensible_string_enum!(UrlRetrievalStatus, UrlRetrievalStatusKnown {
240    UrlRetrievalStatusUnspecified => "URL_RETRIEVAL_STATUS_UNSPECIFIED",
241    UrlRetrievalStatusSuccess => "URL_RETRIEVAL_STATUS_SUCCESS",
242    UrlRetrievalStatusError => "URL_RETRIEVAL_STATUS_ERROR",
243    UrlRetrievalStatusPaywall => "URL_RETRIEVAL_STATUS_PAYWALL",
244    UrlRetrievalStatusUnsafe => "URL_RETRIEVAL_STATUS_UNSAFE",
245});
246
247extensible_string_enum!(SupportedGenerationMethod, SupportedGenerationMethodKnown {
248    GenerateMessage => "generateMessage",
249    GenerateContent => "generateContent",
250    StreamGenerateContent => "streamGenerateContent",
251    CountTokens => "countTokens",
252    EmbedContent => "embedContent",
253    BatchEmbedContents => "batchEmbedContents",
254});
255
256extensible_string_enum!(BatchState, BatchStateKnown {
257    BatchStateUnspecified => "BATCH_STATE_UNSPECIFIED",
258    BatchStatePending => "BATCH_STATE_PENDING",
259    BatchStateRunning => "BATCH_STATE_RUNNING",
260    BatchStateSucceeded => "BATCH_STATE_SUCCEEDED",
261    BatchStateFailed => "BATCH_STATE_FAILED",
262    BatchStateCancelled => "BATCH_STATE_CANCELLED",
263    BatchStateExpired => "BATCH_STATE_EXPIRED",
264});
265
266extensible_string_enum!(ImageAspectRatio, ImageAspectRatioKnown {
267    OneToOne => "1:1",
268    OneToFour => "1:4",
269    FourToOne => "4:1",
270    OneToEight => "1:8",
271    EightToOne => "8:1",
272    TwoToThree => "2:3",
273    ThreeToTwo => "3:2",
274    ThreeToFour => "3:4",
275    FourToThree => "4:3",
276    FourToFive => "4:5",
277    FiveToFour => "5:4",
278    NineToSixteen => "9:16",
279    SixteenToNine => "16:9",
280    TwentyOneToNine => "21:9",
281});
282
283extensible_string_enum!(ImageSize, ImageSizeKnown {
284    Size512 => "512",
285    Size1K => "1K",
286    Size2K => "2K",
287    Size4K => "4K",
288});
289
290extensible_string_enum!(TextResponseFormatMimeType, TextResponseFormatMimeTypeKnown {
291    MimeTypeUnspecified => "MIME_TYPE_UNSPECIFIED",
292    ApplicationJson => "APPLICATION_JSON",
293    TextPlain => "TEXT_PLAIN",
294});
295
296extensible_string_enum!(AudioResponseFormatMimeType, AudioResponseFormatMimeTypeKnown {
297    MimeTypeUnspecified => "MIME_TYPE_UNSPECIFIED",
298    AudioMp3 => "AUDIO_MP3",
299    AudioOggOpus => "AUDIO_OGG_OPUS",
300    AudioL16 => "AUDIO_L16",
301    AudioWav => "AUDIO_WAV",
302    AudioAlaw => "AUDIO_ALAW",
303    AudioMulaw => "AUDIO_MULAW",
304});
305
306extensible_string_enum!(AudioResponseDelivery, AudioResponseDeliveryKnown {
307    DeliveryUnspecified => "DELIVERY_UNSPECIFIED",
308    Inline => "INLINE",
309    Uri => "URI",
310});
311
312extensible_string_enum!(ImageResponseFormatMimeType, ImageResponseFormatMimeTypeKnown {
313    MimeTypeUnspecified => "MIME_TYPE_UNSPECIFIED",
314    ImageJpeg => "IMAGE_JPEG",
315});
316
317extensible_string_enum!(ImageResponseDelivery, ImageResponseDeliveryKnown {
318    DeliveryUnspecified => "DELIVERY_UNSPECIFIED",
319    Inline => "INLINE",
320    Uri => "URI",
321});
322
323extensible_string_enum!(ImageResponseAspectRatio, ImageResponseAspectRatioKnown {
324    AspectRatioUnspecified => "ASPECT_RATIO_UNSPECIFIED",
325    AspectRatioOneByOne => "ASPECT_RATIO_ONE_BY_ONE",
326    AspectRatioTwoByThree => "ASPECT_RATIO_TWO_BY_THREE",
327    AspectRatioThreeByTwo => "ASPECT_RATIO_THREE_BY_TWO",
328    AspectRatioThreeByFour => "ASPECT_RATIO_THREE_BY_FOUR",
329    AspectRatioFourByThree => "ASPECT_RATIO_FOUR_BY_THREE",
330    AspectRatioFourByFive => "ASPECT_RATIO_FOUR_BY_FIVE",
331    AspectRatioFiveByFour => "ASPECT_RATIO_FIVE_BY_FOUR",
332    AspectRatioNineBySixteen => "ASPECT_RATIO_NINE_BY_SIXTEEN",
333    AspectRatioSixteenByNine => "ASPECT_RATIO_SIXTEEN_BY_NINE",
334    AspectRatioTwentyOneByNine => "ASPECT_RATIO_TWENTY_ONE_BY_NINE",
335    AspectRatioOneByEight => "ASPECT_RATIO_ONE_BY_EIGHT",
336    AspectRatioEightByOne => "ASPECT_RATIO_EIGHT_BY_ONE",
337    AspectRatioOneByFour => "ASPECT_RATIO_ONE_BY_FOUR",
338    AspectRatioFourByOne => "ASPECT_RATIO_FOUR_BY_ONE",
339});
340
341extensible_string_enum!(ImageResponseSize, ImageResponseSizeKnown {
342    ImageSizeUnspecified => "IMAGE_SIZE_UNSPECIFIED",
343    ImageSizeFiveTwelve => "IMAGE_SIZE_FIVE_TWELVE",
344    ImageSizeOneK => "IMAGE_SIZE_ONE_K",
345    ImageSizeTwoK => "IMAGE_SIZE_TWO_K",
346    ImageSizeFourK => "IMAGE_SIZE_FOUR_K",
347});
348
349extensible_string_enum!(SpeechLanguageCode, SpeechLanguageCodeKnown {
350    DeDe => "de-DE",
351    EnAu => "en-AU",
352    EnGb => "en-GB",
353    EnIn => "en-IN",
354    EnUs => "en-US",
355    EsUs => "es-US",
356    FrFr => "fr-FR",
357    HiIn => "hi-IN",
358    PtBr => "pt-BR",
359    ArXa => "ar-XA",
360    EsEs => "es-ES",
361    FrCa => "fr-CA",
362    IdId => "id-ID",
363    ItIt => "it-IT",
364    JaJp => "ja-JP",
365    TrTr => "tr-TR",
366    ViVn => "vi-VN",
367    BnIn => "bn-IN",
368    GuIn => "gu-IN",
369    KnIn => "kn-IN",
370    MlIn => "ml-IN",
371    MrIn => "mr-IN",
372    TaIn => "ta-IN",
373    TeIn => "te-IN",
374    NlNl => "nl-NL",
375    KoKr => "ko-KR",
376    CmnCn => "cmn-CN",
377    PlPl => "pl-PL",
378    RuRu => "ru-RU",
379    ThTh => "th-TH",
380});