Skip to main content

gproxy_protocol/wire/gemini/
generation.rs

1pub use super::audio::{
2    AudioTranscriptionConfig, AudioTranscriptionMode, LanguageAuto, LanguageHints,
3    TranslationConfig,
4};
5use super::content::*;
6use crate::Rest;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
11#[derive(gproxy_protocol_macros::DeclaredFields)]
12#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
13pub enum ThinkingLevel {
14    #[serde(rename = "THINKING_LEVEL_UNSPECIFIED")]
15    Unspecified,
16    #[serde(rename = "MINIMAL")]
17    Minimal,
18    #[serde(rename = "LOW")]
19    Low,
20    #[serde(rename = "MEDIUM")]
21    Medium,
22    #[serde(rename = "HIGH")]
23    High,
24}
25#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
26#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
27#[derive(gproxy_protocol_macros::DeclaredFields)]
28#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
29pub enum GenerationMediaResolution {
30    #[serde(rename = "MEDIA_RESOLUTION_UNSPECIFIED")]
31    Unspecified,
32    #[serde(rename = "MEDIA_RESOLUTION_LOW")]
33    Low,
34    #[serde(rename = "MEDIA_RESOLUTION_MEDIUM")]
35    Medium,
36    #[serde(rename = "MEDIA_RESOLUTION_HIGH")]
37    High,
38}
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
41#[derive(gproxy_protocol_macros::DeclaredFields)]
42#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
43pub enum TextMimeType {
44    #[serde(rename = "MIME_TYPE_UNSPECIFIED")]
45    Unspecified,
46    #[serde(rename = "APPLICATION_JSON")]
47    ApplicationJson,
48    #[serde(rename = "TEXT_PLAIN")]
49    TextPlain,
50}
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
52#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
53#[derive(gproxy_protocol_macros::DeclaredFields)]
54#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
55pub enum AudioMimeType {
56    #[serde(rename = "MIME_TYPE_UNSPECIFIED")]
57    Unspecified,
58    #[serde(rename = "AUDIO_MP3")]
59    AudioMp3,
60    #[serde(rename = "AUDIO_OGG_OPUS")]
61    AudioOggOpus,
62    #[serde(rename = "AUDIO_L16")]
63    AudioL16,
64    #[serde(rename = "AUDIO_WAV")]
65    AudioWav,
66    #[serde(rename = "AUDIO_ALAW")]
67    AudioAlaw,
68    #[serde(rename = "AUDIO_MULAW")]
69    AudioMulaw,
70}
71#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
73#[derive(gproxy_protocol_macros::DeclaredFields)]
74#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
75pub enum Delivery {
76    #[serde(rename = "DELIVERY_UNSPECIFIED")]
77    Unspecified,
78    #[serde(rename = "INLINE")]
79    Inline,
80    #[serde(rename = "URI")]
81    Uri,
82}
83#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
84#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
85#[derive(gproxy_protocol_macros::DeclaredFields)]
86#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
87pub enum ImageMimeType {
88    #[serde(rename = "MIME_TYPE_UNSPECIFIED")]
89    Unspecified,
90    #[serde(rename = "IMAGE_JPEG")]
91    ImageJpeg,
92}
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
95#[derive(gproxy_protocol_macros::DeclaredFields)]
96#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
97pub enum AspectRatio {
98    #[serde(rename = "ASPECT_RATIO_UNSPECIFIED")]
99    Unspecified,
100    #[serde(rename = "ASPECT_RATIO_ONE_BY_ONE")]
101    OneByOne,
102    #[serde(rename = "ASPECT_RATIO_TWO_BY_THREE")]
103    TwoByThree,
104    #[serde(rename = "ASPECT_RATIO_THREE_BY_TWO")]
105    ThreeByTwo,
106    #[serde(rename = "ASPECT_RATIO_THREE_BY_FOUR")]
107    ThreeByFour,
108    #[serde(rename = "ASPECT_RATIO_FOUR_BY_THREE")]
109    FourByThree,
110    #[serde(rename = "ASPECT_RATIO_FOUR_BY_FIVE")]
111    FourByFive,
112    #[serde(rename = "ASPECT_RATIO_FIVE_BY_FOUR")]
113    FiveByFour,
114    #[serde(rename = "ASPECT_RATIO_NINE_BY_SIXTEEN")]
115    NineBySixteen,
116    #[serde(rename = "ASPECT_RATIO_SIXTEEN_BY_NINE")]
117    SixteenByNine,
118    #[serde(rename = "ASPECT_RATIO_TWENTY_ONE_BY_NINE")]
119    TwentyOneByNine,
120    #[serde(rename = "ASPECT_RATIO_ONE_BY_EIGHT")]
121    OneByEight,
122    #[serde(rename = "ASPECT_RATIO_EIGHT_BY_ONE")]
123    EightByOne,
124    #[serde(rename = "ASPECT_RATIO_ONE_BY_FOUR")]
125    OneByFour,
126    #[serde(rename = "ASPECT_RATIO_FOUR_BY_ONE")]
127    FourByOne,
128}
129#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
130#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
131#[derive(gproxy_protocol_macros::DeclaredFields)]
132#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
133pub enum ImageSize {
134    #[serde(rename = "IMAGE_SIZE_UNSPECIFIED")]
135    Unspecified,
136    #[serde(rename = "IMAGE_SIZE_FIVE_TWELVE")]
137    FiveTwelve,
138    #[serde(rename = "IMAGE_SIZE_ONE_K")]
139    OneK,
140    #[serde(rename = "IMAGE_SIZE_TWO_K")]
141    TwoK,
142    #[serde(rename = "IMAGE_SIZE_FOUR_K")]
143    FourK,
144}
145#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
146#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
147#[derive(gproxy_protocol_macros::DeclaredFields)]
148#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
149pub enum ServiceTier {
150    #[serde(rename = "unspecified")]
151    Unspecified,
152    #[serde(rename = "standard")]
153    Standard,
154    #[serde(rename = "flex")]
155    Flex,
156    #[serde(rename = "priority")]
157    Priority,
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
161#[serde(rename_all = "camelCase")]
162#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
163#[derive(gproxy_protocol_macros::DeclaredFields)]
164#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
165pub struct SpeechConfig {
166    #[serde(skip_serializing_if = "Option::is_none")]
167    #[serde(alias = "voice_config")]
168    pub voice_config: Option<VoiceConfig>,
169    #[serde(skip_serializing_if = "Option::is_none")]
170    #[serde(alias = "multi_speaker_voice_config")]
171    pub multi_speaker_voice_config: Option<MultiSpeakerVoiceConfig>,
172    #[serde(skip_serializing_if = "Option::is_none")]
173    #[serde(alias = "language_code")]
174    pub language_code: Option<String>,
175    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
176    pub rest: Rest,
177}
178#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
179#[serde(rename_all = "camelCase")]
180#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
181#[derive(gproxy_protocol_macros::DeclaredFields)]
182#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
183pub struct VoiceConfig {
184    #[serde(alias = "prebuilt_voice_config")]
185    #[serde(skip_serializing_if = "Option::is_none")]
186    pub prebuilt_voice_config: Option<PrebuiltVoiceConfig>,
187    /// Prebuilt speaker name, stored `voice_...` ID, or client-managed `voicekey_...`.
188    #[serde(skip_serializing_if = "Option::is_none")]
189    pub voice: Option<String>,
190    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
191    pub rest: Rest,
192}
193#[derive(
194    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
195)]
196#[serde(rename_all = "camelCase")]
197#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
198#[derive(gproxy_protocol_macros::DeclaredFields)]
199#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
200pub struct PrebuiltVoiceConfig {
201    #[serde(alias = "voice_name")]
202    #[serde(skip_serializing_if = "Option::is_none")]
203    pub voice_name: Option<String>,
204    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
205    pub rest: Rest,
206}
207#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
208#[serde(rename_all = "camelCase")]
209#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
210#[derive(gproxy_protocol_macros::DeclaredFields)]
211#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
212pub struct MultiSpeakerVoiceConfig {
213    #[serde(alias = "speaker_voice_configs")]
214    pub speaker_voice_configs: Vec<SpeakerVoiceConfig>,
215    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
216    pub rest: Rest,
217}
218#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
219#[serde(rename_all = "camelCase")]
220#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
221#[derive(gproxy_protocol_macros::DeclaredFields)]
222#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
223pub struct SpeakerVoiceConfig {
224    pub speaker: String,
225    #[serde(alias = "voice_config")]
226    pub voice_config: VoiceConfig,
227    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
228    pub rest: Rest,
229}
230#[derive(
231    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
232)]
233#[serde(rename_all = "camelCase")]
234#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
235#[derive(gproxy_protocol_macros::DeclaredFields)]
236#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
237pub struct ThinkingConfig {
238    #[serde(skip_serializing_if = "Option::is_none")]
239    #[serde(alias = "thinking_budget")]
240    pub thinking_budget: Option<i64>,
241    #[serde(skip_serializing_if = "Option::is_none")]
242    #[serde(alias = "thinking_level")]
243    pub thinking_level: Option<ThinkingLevel>,
244    #[serde(skip_serializing_if = "Option::is_none")]
245    #[serde(alias = "include_thoughts")]
246    pub include_thoughts: Option<bool>,
247    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
248    pub rest: Rest,
249}
250#[derive(
251    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
252)]
253#[serde(rename_all = "camelCase")]
254#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
255#[derive(gproxy_protocol_macros::DeclaredFields)]
256#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
257pub struct ImageConfig {
258    #[serde(skip_serializing_if = "Option::is_none")]
259    #[serde(alias = "aspect_ratio")]
260    pub aspect_ratio: Option<String>,
261    #[serde(skip_serializing_if = "Option::is_none")]
262    #[serde(alias = "image_size")]
263    pub image_size: Option<String>,
264    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
265    pub rest: Rest,
266}
267#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
268#[serde(rename_all = "camelCase")]
269#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
270#[derive(gproxy_protocol_macros::DeclaredFields)]
271#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
272pub struct ResponseFormatConfig {
273    #[serde(skip_serializing_if = "Option::is_none")]
274    pub text: Option<TextResponseFormat>,
275    #[serde(skip_serializing_if = "Option::is_none")]
276    pub audio: Option<AudioResponseFormat>,
277    #[serde(skip_serializing_if = "Option::is_none")]
278    pub image: Option<ImageResponseFormat>,
279    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
280    pub rest: Rest,
281}
282#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
283#[serde(rename_all = "camelCase")]
284#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
285#[derive(gproxy_protocol_macros::DeclaredFields)]
286#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
287pub struct TextResponseFormat {
288    #[serde(skip_serializing_if = "Option::is_none")]
289    #[serde(alias = "mime_type")]
290    pub mime_type: Option<TextMimeType>,
291    #[serde(skip_serializing_if = "Option::is_none")]
292    pub schema: Option<serde_json::Value>,
293    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
294    pub rest: Rest,
295}
296#[derive(
297    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
298)]
299#[serde(rename_all = "camelCase")]
300#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
301#[derive(gproxy_protocol_macros::DeclaredFields)]
302#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
303pub struct AudioResponseFormat {
304    #[serde(skip_serializing_if = "Option::is_none")]
305    #[serde(alias = "mime_type")]
306    pub mime_type: Option<AudioMimeType>,
307    #[serde(skip_serializing_if = "Option::is_none")]
308    pub delivery: Option<Delivery>,
309    #[serde(skip_serializing_if = "Option::is_none")]
310    #[serde(alias = "sample_rate")]
311    pub sample_rate: Option<i64>,
312    #[serde(skip_serializing_if = "Option::is_none")]
313    #[serde(alias = "bit_rate")]
314    pub bit_rate: Option<i64>,
315    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
316    pub rest: Rest,
317}
318#[derive(
319    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
320)]
321#[serde(rename_all = "camelCase")]
322#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
323#[derive(gproxy_protocol_macros::DeclaredFields)]
324#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
325pub struct ImageResponseFormat {
326    #[serde(skip_serializing_if = "Option::is_none")]
327    #[serde(alias = "mime_type")]
328    pub mime_type: Option<ImageMimeType>,
329    #[serde(skip_serializing_if = "Option::is_none")]
330    pub delivery: Option<Delivery>,
331    #[serde(skip_serializing_if = "Option::is_none")]
332    #[serde(alias = "aspect_ratio")]
333    pub aspect_ratio: Option<AspectRatio>,
334    #[serde(skip_serializing_if = "Option::is_none")]
335    #[serde(alias = "image_size")]
336    pub image_size: Option<ImageSize>,
337    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
338    pub rest: Rest,
339}
340
341#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
342#[serde(rename_all = "camelCase")]
343#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
344/// Full `GenerateContentRequest` object accepted inside CountTokens. Its
345/// `model` is part of this embedded Batch API object; standalone REST
346/// generation keeps model in its path.
347#[derive(gproxy_protocol_macros::DeclaredFields)]
348#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
349pub struct EmbeddedGenerateContentRequest {
350    /// Required by the Batch API `GenerateContentRequest` embedded in CountTokens.
351    pub model: String,
352    pub contents: Vec<Content>,
353    #[serde(skip_serializing_if = "Option::is_none")]
354    pub tools: Option<Vec<Tool>>,
355    #[serde(skip_serializing_if = "Option::is_none")]
356    #[serde(alias = "tool_config")]
357    pub tool_config: Option<ToolConfig>,
358    #[serde(skip_serializing_if = "Option::is_none")]
359    #[serde(alias = "safety_settings")]
360    pub safety_settings: Option<Vec<SafetySetting>>,
361    #[serde(skip_serializing_if = "Option::is_none")]
362    pub labels: Option<std::collections::BTreeMap<String, String>>,
363    #[serde(skip_serializing_if = "Option::is_none")]
364    #[serde(alias = "system_instruction")]
365    pub system_instruction: Option<Content>,
366    #[serde(skip_serializing_if = "Option::is_none")]
367    #[serde(alias = "generation_config")]
368    pub generation_config: Option<GenerationConfig>,
369    #[serde(skip_serializing_if = "Option::is_none")]
370    #[serde(alias = "cached_content")]
371    pub cached_content: Option<String>,
372    #[serde(skip_serializing_if = "Option::is_none")]
373    #[serde(alias = "service_tier")]
374    pub service_tier: Option<ServiceTier>,
375    #[serde(skip_serializing_if = "Option::is_none")]
376    pub store: Option<bool>,
377    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
378    pub rest: Rest,
379}
380
381#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
382#[serde(rename_all = "camelCase")]
383#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
384#[derive(gproxy_protocol_macros::DeclaredFields)]
385#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
386pub struct GenerationConfig {
387    #[serde(skip_serializing_if = "Option::is_none")]
388    #[serde(alias = "stop_sequences")]
389    pub stop_sequences: Option<Vec<String>>,
390    #[serde(skip_serializing_if = "Option::is_none")]
391    #[serde(alias = "response_mime_type")]
392    pub response_mime_type: Option<String>,
393    #[serde(skip_serializing_if = "Option::is_none")]
394    #[serde(alias = "response_schema")]
395    pub response_schema: Option<Schema>,
396    #[serde(
397        rename = "_responseJsonSchema",
398        skip_serializing_if = "Option::is_none"
399    )]
400    pub response_json_schema_internal: Option<serde_json::Value>,
401    #[serde(skip_serializing_if = "Option::is_none")]
402    #[serde(alias = "response_json_schema")]
403    pub response_json_schema: Option<serde_json::Value>,
404    #[serde(skip_serializing_if = "Option::is_none")]
405    #[serde(alias = "response_modalities")]
406    pub response_modalities: Option<Vec<Modality>>,
407    #[serde(skip_serializing_if = "Option::is_none")]
408    #[serde(alias = "candidate_count")]
409    pub candidate_count: Option<i64>,
410    #[serde(skip_serializing_if = "Option::is_none")]
411    #[serde(alias = "max_output_tokens")]
412    pub max_output_tokens: Option<i64>,
413    #[serde(skip_serializing_if = "Option::is_none")]
414    pub temperature: Option<f64>,
415    #[serde(skip_serializing_if = "Option::is_none")]
416    #[serde(alias = "top_p")]
417    pub top_p: Option<f64>,
418    #[serde(skip_serializing_if = "Option::is_none")]
419    #[serde(alias = "top_k")]
420    pub top_k: Option<i64>,
421    #[serde(skip_serializing_if = "Option::is_none")]
422    pub seed: Option<i64>,
423    #[serde(skip_serializing_if = "Option::is_none")]
424    #[serde(alias = "presence_penalty")]
425    pub presence_penalty: Option<f64>,
426    #[serde(skip_serializing_if = "Option::is_none")]
427    #[serde(alias = "frequency_penalty")]
428    pub frequency_penalty: Option<f64>,
429    #[serde(skip_serializing_if = "Option::is_none")]
430    #[serde(alias = "response_logprobs")]
431    pub response_logprobs: Option<bool>,
432    #[serde(skip_serializing_if = "Option::is_none")]
433    pub logprobs: Option<i64>,
434    #[serde(skip_serializing_if = "Option::is_none")]
435    #[serde(alias = "enable_enhanced_civic_answers")]
436    pub enable_enhanced_civic_answers: Option<bool>,
437    #[serde(skip_serializing_if = "Option::is_none")]
438    #[serde(alias = "speech_config")]
439    pub speech_config: Option<SpeechConfig>,
440    #[serde(skip_serializing_if = "Option::is_none")]
441    #[serde(alias = "thinking_config")]
442    pub thinking_config: Option<ThinkingConfig>,
443    #[serde(skip_serializing_if = "Option::is_none")]
444    #[serde(alias = "image_config")]
445    pub image_config: Option<ImageConfig>,
446    #[serde(skip_serializing_if = "Option::is_none")]
447    #[serde(alias = "media_resolution")]
448    pub media_resolution: Option<GenerationMediaResolution>,
449    #[serde(skip_serializing_if = "Option::is_none")]
450    #[serde(alias = "response_format")]
451    pub response_format: Option<ResponseFormatConfig>,
452    #[serde(
453        alias = "enable_affective_dialog",
454        skip_serializing_if = "Option::is_none"
455    )]
456    pub enable_affective_dialog: Option<bool>,
457    #[serde(alias = "translation_config", skip_serializing_if = "Option::is_none")]
458    pub translation_config: Option<TranslationConfig>,
459    #[serde(
460        alias = "audio_transcription_config",
461        skip_serializing_if = "Option::is_none"
462    )]
463    pub audio_transcription_config: Option<AudioTranscriptionConfig>,
464    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
465    pub rest: Rest,
466}