gcp_bigquery_client/model/
table_field_schema.rs

1use crate::model::field_type::FieldType;
2use crate::model::table_field_schema_categories::TableFieldSchemaCategories;
3use crate::model::table_field_schema_policy::TableFieldSchemaPolicyTags;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct TableFieldSchema {
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub categories: Option<TableFieldSchemaCategories>,
11    /// [Optional] The field description. The maximum length is 1,024 characters.
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub description: Option<String>,
14    /// [Optional] Describes the nested schema fields if the type property is set to RECORD.
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub fields: Option<Vec<TableFieldSchema>>,
17    /// [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub mode: Option<String>,
20    /// [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
21    pub name: String,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub policy_tags: Option<TableFieldSchemaPolicyTags>,
24    /// [Required] The field data type. Possible values include STRING, BYTES, INTEGER, INT64 (same as INTEGER), FLOAT, FLOAT64 (same as FLOAT), NUMERIC, BIGNUMERIC, BOOLEAN, BOOL (same as BOOLEAN), TIMESTAMP, DATE, TIME, DATETIME, RECORD (where RECORD indicates that the field contains a nested schema) or STRUCT (same as RECORD).
25    pub r#type: FieldType,
26}
27
28impl TableFieldSchema {
29    pub fn new(field_name: &str, field_type: FieldType) -> Self {
30        Self {
31            categories: None,
32            description: None,
33            fields: None,
34            mode: None,
35            name: field_name.into(),
36            policy_tags: None,
37            r#type: field_type,
38        }
39    }
40
41    pub fn integer(field_name: &str) -> Self {
42        Self {
43            categories: None,
44            description: None,
45            fields: None,
46            mode: None,
47            name: field_name.into(),
48            policy_tags: None,
49            r#type: FieldType::Integer,
50        }
51    }
52
53    pub fn float(field_name: &str) -> Self {
54        Self {
55            categories: None,
56            description: None,
57            fields: None,
58            mode: None,
59            name: field_name.into(),
60            policy_tags: None,
61            r#type: FieldType::Float,
62        }
63    }
64
65    pub fn bool(field_name: &str) -> Self {
66        Self {
67            categories: None,
68            description: None,
69            fields: None,
70            mode: None,
71            name: field_name.into(),
72            policy_tags: None,
73            r#type: FieldType::Bool,
74        }
75    }
76
77    pub fn string(field_name: &str) -> Self {
78        Self {
79            categories: None,
80            description: None,
81            fields: None,
82            mode: None,
83            name: field_name.into(),
84            policy_tags: None,
85            r#type: FieldType::String,
86        }
87    }
88
89    pub fn record(field_name: &str, fields: Vec<TableFieldSchema>) -> Self {
90        Self {
91            categories: None,
92            description: None,
93            fields: Some(fields),
94            mode: None,
95            name: field_name.into(),
96            policy_tags: None,
97            r#type: FieldType::Record,
98        }
99    }
100
101    pub fn bytes(field_name: &str) -> Self {
102        Self {
103            categories: None,
104            description: None,
105            fields: None,
106            mode: None,
107            name: field_name.into(),
108            policy_tags: None,
109            r#type: FieldType::Bytes,
110        }
111    }
112
113    pub fn numeric(field_name: &str) -> Self {
114        Self {
115            categories: None,
116            description: None,
117            fields: None,
118            mode: None,
119            name: field_name.into(),
120            policy_tags: None,
121            r#type: FieldType::Numeric,
122        }
123    }
124
125    pub fn big_numeric(field_name: &str) -> Self {
126        Self {
127            categories: None,
128            description: None,
129            fields: None,
130            mode: None,
131            name: field_name.into(),
132            policy_tags: None,
133            r#type: FieldType::Bignumeric,
134        }
135    }
136
137    pub fn timestamp(field_name: &str) -> Self {
138        Self {
139            categories: None,
140            description: None,
141            fields: None,
142            mode: None,
143            name: field_name.into(),
144            policy_tags: None,
145            r#type: FieldType::Timestamp,
146        }
147    }
148
149    pub fn date(field_name: &str) -> Self {
150        Self {
151            categories: None,
152            description: None,
153            fields: None,
154            mode: None,
155            name: field_name.into(),
156            policy_tags: None,
157            r#type: FieldType::Date,
158        }
159    }
160
161    pub fn time(field_name: &str) -> Self {
162        Self {
163            categories: None,
164            description: None,
165            fields: None,
166            mode: None,
167            name: field_name.into(),
168            policy_tags: None,
169            r#type: FieldType::Time,
170        }
171    }
172
173    pub fn date_time(field_name: &str) -> Self {
174        Self {
175            categories: None,
176            description: None,
177            fields: None,
178            mode: None,
179            name: field_name.into(),
180            policy_tags: None,
181            r#type: FieldType::Datetime,
182        }
183    }
184
185    pub fn geography(field_name: &str) -> Self {
186        Self {
187            categories: None,
188            description: None,
189            fields: None,
190            mode: None,
191            name: field_name.into(),
192            policy_tags: None,
193            r#type: FieldType::Geography,
194        }
195    }
196
197    pub fn json(field_name: &str) -> Self {
198        Self {
199            categories: None,
200            description: None,
201            fields: None,
202            mode: None,
203            name: field_name.into(),
204            policy_tags: None,
205            r#type: FieldType::Json,
206        }
207    }
208
209    pub fn interval(field_name: &str) -> Self {
210        Self {
211            categories: None,
212            description: None,
213            fields: None,
214            mode: None,
215            name: field_name.into(),
216            policy_tags: None,
217            r#type: FieldType::Interval,
218        }
219    }
220}