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