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});