gcp_bigquery_client/model/
table_field_schema.rs1use 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 #[serde(skip_serializing_if = "Option::is_none")]
13 pub description: Option<String>,
14 #[serde(skip_serializing_if = "Option::is_none")]
16 pub fields: Option<Vec<TableFieldSchema>>,
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub mode: Option<String>,
20 pub name: String,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub policy_tags: Option<TableFieldSchemaPolicyTags>,
24 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}