Skip to main content

groundmodels_core/
agsi.rs

1#![allow(clippy::redundant_closure_call)]
2#![allow(clippy::needless_lifetimes)]
3#![allow(clippy::match_single_binding)]
4#![allow(clippy::clone_on_copy)]
5
6#[doc = r" Error types."]
7pub mod error {
8    #[doc = r" Error from a `TryFrom` or `FromStr` implementation."]
9    pub struct ConversionError(::std::borrow::Cow<'static, str>);
10    impl ::std::error::Error for ConversionError {}
11    impl ::std::fmt::Display for ConversionError {
12        fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> Result<(), ::std::fmt::Error> {
13            ::std::fmt::Display::fmt(&self.0, f)
14        }
15    }
16    impl ::std::fmt::Debug for ConversionError {
17        fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> Result<(), ::std::fmt::Error> {
18            ::std::fmt::Debug::fmt(&self.0, f)
19        }
20    }
21    impl From<&'static str> for ConversionError {
22        fn from(value: &'static str) -> Self {
23            Self(value.into())
24        }
25    }
26    impl From<String> for ConversionError {
27        fn from(value: String) -> Self {
28            Self(value.into())
29        }
30    }
31}
32#[doc = "Association of Geotechnical & Geoenvironmental Specialists transfer format for ground model and interpreted data (AGSi)"]
33#[doc = r""]
34#[doc = r" <details><summary>JSON schema</summary>"]
35#[doc = r""]
36#[doc = r" ```json"]
37#[doc = "{"]
38#[doc = "  \"$id\": \"https://ags-data-format-wg.gitlab.io/agsi/agsi_standard/1.0.1/\","]
39#[doc = "  \"title\": \"AGSi v1.0.1\","]
40#[doc = "  \"description\": \"Association of Geotechnical & Geoenvironmental Specialists transfer format for ground model and interpreted data (AGSi)\","]
41#[doc = "  \"type\": \"object\","]
42#[doc = "  \"required\": ["]
43#[doc = "    \"agsFile\","]
44#[doc = "    \"agsSchema\""]
45#[doc = "  ],"]
46#[doc = "  \"properties\": {"]
47#[doc = "    \"agsFile\": {"]
48#[doc = "      \"$ref\": \"#/$defs/agsFile\""]
49#[doc = "    },"]
50#[doc = "    \"agsProject\": {"]
51#[doc = "      \"$ref\": \"#/$defs/agsProject\""]
52#[doc = "    },"]
53#[doc = "    \"agsSchema\": {"]
54#[doc = "      \"$ref\": \"#/$defs/agsSchema\""]
55#[doc = "    },"]
56#[doc = "    \"agsiModel\": {"]
57#[doc = "      \"type\": \"array\","]
58#[doc = "      \"items\": {"]
59#[doc = "        \"$ref\": \"#/$defs/agsiModel\""]
60#[doc = "      }"]
61#[doc = "    }"]
62#[doc = "  },"]
63#[doc = "  \"additionalProperties\": false"]
64#[doc = "}"]
65#[doc = r" ```"]
66#[doc = r" </details>"]
67#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
68#[serde(deny_unknown_fields)]
69pub struct AgSiV101 {
70    #[serde(rename = "agsFile")]
71    pub ags_file: AgsFile,
72    #[serde(
73        rename = "agsProject",
74        default,
75        skip_serializing_if = "::std::option::Option::is_none"
76    )]
77    pub ags_project: ::std::option::Option<AgsProject>,
78    #[serde(rename = "agsSchema")]
79    pub ags_schema: AgsSchema,
80    #[serde(
81        rename = "agsiModel",
82        default,
83        skip_serializing_if = "::std::vec::Vec::is_empty"
84    )]
85    pub agsi_model: ::std::vec::Vec<AgsiModel>,
86}
87impl ::std::convert::From<&AgSiV101> for AgSiV101 {
88    fn from(value: &AgSiV101) -> Self {
89        value.clone()
90    }
91}
92impl AgSiV101 {
93    pub fn builder() -> builder::AgSiV101 {
94        Default::default()
95    }
96}
97#[doc = "Metadata for the AGSi package (which comprises the AGSi file and included supporting files).  The AGSi package should be treated as a document in accordance with standards established for the project. The attributes provided align with good practice BIM, in accordance with ISO19650. It is recommended that, where possible, this object is output at the top of the file, after the schema object, for human readability."]
98#[doc = r""]
99#[doc = r" <details><summary>JSON schema</summary>"]
100#[doc = r""]
101#[doc = r" ```json"]
102#[doc = "{"]
103#[doc = "  \"description\": \"Metadata for the AGSi package (which comprises the AGSi file and included supporting files).  The AGSi package should be treated as a document in accordance with standards established for the project. The attributes provided align with good practice BIM, in accordance with ISO19650. It is recommended that, where possible, this object is output at the top of the file, after the schema object, for human readability.\","]
104#[doc = "  \"type\": \"object\","]
105#[doc = "  \"required\": ["]
106#[doc = "    \"producedBy\","]
107#[doc = "    \"title\""]
108#[doc = "  ],"]
109#[doc = "  \"properties\": {"]
110#[doc = "    \"approvedBy\": {"]
111#[doc = "      \"description\": \"Person(s) identified as approver.\","]
112#[doc = "      \"type\": \"string\","]
113#[doc = "      \"example\": \"T Black\""]
114#[doc = "    },"]
115#[doc = "    \"checkedBy\": {"]
116#[doc = "      \"description\": \"Person(s) identified as checker.\","]
117#[doc = "      \"type\": \"string\","]
118#[doc = "      \"example\": \"P Brown\""]
119#[doc = "    },"]
120#[doc = "    \"date\": {"]
121#[doc = "      \"description\": \"Date of production.\","]
122#[doc = "      \"type\": \"string\","]
123#[doc = "      \"format\": \"date\","]
124#[doc = "      \"example\": \"2018-10-05\""]
125#[doc = "    },"]
126#[doc = "    \"description\": {"]
127#[doc = "      \"description\": \"Additional description, if required.\","]
128#[doc = "      \"type\": \"string\","]
129#[doc = "      \"example\": \"Geological model and geotechnical design models produced for Stage 4 design\""]
130#[doc = "    },"]
131#[doc = "    \"fileURI\": {"]
132#[doc = "      \"description\": \"URI (link address) for the location of this AGSi package within the project document system. Spaces are not permitted in URI strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names.\","]
133#[doc = "      \"type\": \"string\","]
134#[doc = "      \"format\": \"uri\","]
135#[doc = "      \"example\": \"https://gothammetro.sharepoint.com/C999/docs/C999-ABC-AX-XX-M3-CG-1234\""]
136#[doc = "    },"]
137#[doc = "    \"fileUUID\": {"]
138#[doc = "      \"description\": \"Universal unique identifier (UUID) for the AGSi package. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. \","]
139#[doc = "      \"type\": \"string\","]
140#[doc = "      \"example\": \"98e17952-c99d-4d87-8f01-8ba75d29b6ad\""]
141#[doc = "    },"]
142#[doc = "    \"madeBy\": {"]
143#[doc = "      \"description\": \"Person(s) identified as originator.\","]
144#[doc = "      \"type\": \"string\","]
145#[doc = "      \"example\": \"A Green\""]
146#[doc = "    },"]
147#[doc = "    \"producedBy\": {"]
148#[doc = "      \"description\": \"Organisation that produced this AGSi package.\","]
149#[doc = "      \"type\": \"string\","]
150#[doc = "      \"minLength\": 1,"]
151#[doc = "      \"example\": \"ABC Consultants\""]
152#[doc = "    },"]
153#[doc = "    \"projectTitle\": {"]
154#[doc = "      \"description\": \"Name of project (as used for document management system).\","]
155#[doc = "      \"type\": \"string\","]
156#[doc = "      \"example\": \"Gotham City Metro Purple Line, C999 Geotechnical Package X\""]
157#[doc = "    },"]
158#[doc = "    \"reference\": {"]
159#[doc = "      \"description\": \"Document reference (typically in accordance with ISO19650, BS1192 or project standards).\","]
160#[doc = "      \"type\": \"string\","]
161#[doc = "      \"example\": \"C999-ABC-AX-XX-M3-CG-1234\""]
162#[doc = "    },"]
163#[doc = "    \"remarks\": {"]
164#[doc = "      \"description\": \"Additional remarks, if required.\","]
165#[doc = "      \"type\": \"string\","]
166#[doc = "      \"example\": \"Some remarks if required\""]
167#[doc = "    },"]
168#[doc = "    \"revision\": {"]
169#[doc = "      \"description\": \"Revision reference (typically in accordance with ISO19650 or BS1192 or project standards).\","]
170#[doc = "      \"type\": \"string\","]
171#[doc = "      \"example\": \"P1\""]
172#[doc = "    },"]
173#[doc = "    \"status\": {"]
174#[doc = "      \"description\": \"Status, typically following recommendations of BS8574.\","]
175#[doc = "      \"type\": \"string\","]
176#[doc = "      \"example\": \"Final\""]
177#[doc = "    },"]
178#[doc = "    \"statusCode\": {"]
179#[doc = "      \"description\": \"Status code in accordance with ISO19650 (or BS1192 suitability code).\","]
180#[doc = "      \"type\": \"string\","]
181#[doc = "      \"example\": \"S2\""]
182#[doc = "    },"]
183#[doc = "    \"title\": {"]
184#[doc = "      \"description\": \"Title of the AGSi package (as used for document management system).\","]
185#[doc = "      \"type\": \"string\","]
186#[doc = "      \"minLength\": 1,"]
187#[doc = "      \"example\": \"Stage 3 Sitewide Ground models\""]
188#[doc = "    }"]
189#[doc = "  },"]
190#[doc = "  \"additionalProperties\": false"]
191#[doc = "}"]
192#[doc = r" ```"]
193#[doc = r" </details>"]
194#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
195#[serde(deny_unknown_fields)]
196pub struct AgsFile {
197    #[doc = "Person(s) identified as approver."]
198    #[serde(
199        rename = "approvedBy",
200        default,
201        skip_serializing_if = "::std::option::Option::is_none"
202    )]
203    pub approved_by: ::std::option::Option<::std::string::String>,
204    #[doc = "Person(s) identified as checker."]
205    #[serde(
206        rename = "checkedBy",
207        default,
208        skip_serializing_if = "::std::option::Option::is_none"
209    )]
210    pub checked_by: ::std::option::Option<::std::string::String>,
211    #[doc = "Date of production."]
212    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
213    pub date: ::std::option::Option<::chrono::naive::NaiveDate>,
214    #[doc = "Additional description, if required."]
215    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
216    pub description: ::std::option::Option<::std::string::String>,
217    #[doc = "URI (link address) for the location of this AGSi package within the project document system. Spaces are not permitted in URI strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names."]
218    #[serde(
219        rename = "fileURI",
220        default,
221        skip_serializing_if = "::std::option::Option::is_none"
222    )]
223    pub file_uri: ::std::option::Option<::std::string::String>,
224    #[doc = "Universal unique identifier (UUID) for the AGSi package. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. "]
225    #[serde(
226        rename = "fileUUID",
227        default,
228        skip_serializing_if = "::std::option::Option::is_none"
229    )]
230    pub file_uuid: ::std::option::Option<::std::string::String>,
231    #[doc = "Person(s) identified as originator."]
232    #[serde(
233        rename = "madeBy",
234        default,
235        skip_serializing_if = "::std::option::Option::is_none"
236    )]
237    pub made_by: ::std::option::Option<::std::string::String>,
238    #[doc = "Organisation that produced this AGSi package."]
239    #[serde(rename = "producedBy")]
240    pub produced_by: AgsFileProducedBy,
241    #[doc = "Name of project (as used for document management system)."]
242    #[serde(
243        rename = "projectTitle",
244        default,
245        skip_serializing_if = "::std::option::Option::is_none"
246    )]
247    pub project_title: ::std::option::Option<::std::string::String>,
248    #[doc = "Document reference (typically in accordance with ISO19650, BS1192 or project standards)."]
249    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
250    pub reference: ::std::option::Option<::std::string::String>,
251    #[doc = "Additional remarks, if required."]
252    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
253    pub remarks: ::std::option::Option<::std::string::String>,
254    #[doc = "Revision reference (typically in accordance with ISO19650 or BS1192 or project standards)."]
255    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
256    pub revision: ::std::option::Option<::std::string::String>,
257    #[doc = "Status, typically following recommendations of BS8574."]
258    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
259    pub status: ::std::option::Option<::std::string::String>,
260    #[doc = "Status code in accordance with ISO19650 (or BS1192 suitability code)."]
261    #[serde(
262        rename = "statusCode",
263        default,
264        skip_serializing_if = "::std::option::Option::is_none"
265    )]
266    pub status_code: ::std::option::Option<::std::string::String>,
267    #[doc = "Title of the AGSi package (as used for document management system)."]
268    pub title: AgsFileTitle,
269}
270impl ::std::convert::From<&AgsFile> for AgsFile {
271    fn from(value: &AgsFile) -> Self {
272        value.clone()
273    }
274}
275impl AgsFile {
276    pub fn builder() -> builder::AgsFile {
277        Default::default()
278    }
279}
280#[doc = "Organisation that produced this AGSi package."]
281#[doc = r""]
282#[doc = r" <details><summary>JSON schema</summary>"]
283#[doc = r""]
284#[doc = r" ```json"]
285#[doc = "{"]
286#[doc = "  \"description\": \"Organisation that produced this AGSi package.\","]
287#[doc = "  \"type\": \"string\","]
288#[doc = "  \"minLength\": 1,"]
289#[doc = "  \"example\": \"ABC Consultants\""]
290#[doc = "}"]
291#[doc = r" ```"]
292#[doc = r" </details>"]
293#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
294#[serde(transparent)]
295pub struct AgsFileProducedBy(::std::string::String);
296impl ::std::ops::Deref for AgsFileProducedBy {
297    type Target = ::std::string::String;
298    fn deref(&self) -> &::std::string::String {
299        &self.0
300    }
301}
302impl ::std::convert::From<AgsFileProducedBy> for ::std::string::String {
303    fn from(value: AgsFileProducedBy) -> Self {
304        value.0
305    }
306}
307impl ::std::convert::From<&AgsFileProducedBy> for AgsFileProducedBy {
308    fn from(value: &AgsFileProducedBy) -> Self {
309        value.clone()
310    }
311}
312impl ::std::str::FromStr for AgsFileProducedBy {
313    type Err = self::error::ConversionError;
314    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
315        if value.chars().count() < 1usize {
316            return Err("shorter than 1 characters".into());
317        }
318        Ok(Self(value.to_string()))
319    }
320}
321impl ::std::convert::TryFrom<&str> for AgsFileProducedBy {
322    type Error = self::error::ConversionError;
323    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
324        value.parse()
325    }
326}
327impl ::std::convert::TryFrom<&::std::string::String> for AgsFileProducedBy {
328    type Error = self::error::ConversionError;
329    fn try_from(
330        value: &::std::string::String,
331    ) -> ::std::result::Result<Self, self::error::ConversionError> {
332        value.parse()
333    }
334}
335impl ::std::convert::TryFrom<::std::string::String> for AgsFileProducedBy {
336    type Error = self::error::ConversionError;
337    fn try_from(
338        value: ::std::string::String,
339    ) -> ::std::result::Result<Self, self::error::ConversionError> {
340        value.parse()
341    }
342}
343impl<'de> ::serde::Deserialize<'de> for AgsFileProducedBy {
344    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
345    where
346        D: ::serde::Deserializer<'de>,
347    {
348        ::std::string::String::deserialize(deserializer)?
349            .parse()
350            .map_err(|e: self::error::ConversionError| {
351                <D::Error as ::serde::de::Error>::custom(e.to_string())
352            })
353    }
354}
355#[doc = "Title of the AGSi package (as used for document management system)."]
356#[doc = r""]
357#[doc = r" <details><summary>JSON schema</summary>"]
358#[doc = r""]
359#[doc = r" ```json"]
360#[doc = "{"]
361#[doc = "  \"description\": \"Title of the AGSi package (as used for document management system).\","]
362#[doc = "  \"type\": \"string\","]
363#[doc = "  \"minLength\": 1,"]
364#[doc = "  \"example\": \"Stage 3 Sitewide Ground models\""]
365#[doc = "}"]
366#[doc = r" ```"]
367#[doc = r" </details>"]
368#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
369#[serde(transparent)]
370pub struct AgsFileTitle(::std::string::String);
371impl ::std::ops::Deref for AgsFileTitle {
372    type Target = ::std::string::String;
373    fn deref(&self) -> &::std::string::String {
374        &self.0
375    }
376}
377impl ::std::convert::From<AgsFileTitle> for ::std::string::String {
378    fn from(value: AgsFileTitle) -> Self {
379        value.0
380    }
381}
382impl ::std::convert::From<&AgsFileTitle> for AgsFileTitle {
383    fn from(value: &AgsFileTitle) -> Self {
384        value.clone()
385    }
386}
387impl ::std::str::FromStr for AgsFileTitle {
388    type Err = self::error::ConversionError;
389    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
390        if value.chars().count() < 1usize {
391            return Err("shorter than 1 characters".into());
392        }
393        Ok(Self(value.to_string()))
394    }
395}
396impl ::std::convert::TryFrom<&str> for AgsFileTitle {
397    type Error = self::error::ConversionError;
398    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
399        value.parse()
400    }
401}
402impl ::std::convert::TryFrom<&::std::string::String> for AgsFileTitle {
403    type Error = self::error::ConversionError;
404    fn try_from(
405        value: &::std::string::String,
406    ) -> ::std::result::Result<Self, self::error::ConversionError> {
407        value.parse()
408    }
409}
410impl ::std::convert::TryFrom<::std::string::String> for AgsFileTitle {
411    type Error = self::error::ConversionError;
412    fn try_from(
413        value: ::std::string::String,
414    ) -> ::std::result::Result<Self, self::error::ConversionError> {
415        value.parse()
416    }
417}
418impl<'de> ::serde::Deserialize<'de> for AgsFileTitle {
419    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
420    where
421        D: ::serde::Deserializer<'de>,
422    {
423        ::std::string::String::deserialize(deserializer)?
424            .parse()
425            .map_err(|e: self::error::ConversionError| {
426                <D::Error as ::serde::de::Error>::custom(e.to_string())
427            })
428    }
429}
430#[doc = "Metadata for the specific project/commission (the Project) under which this AGSi package has been delivered. There can be only one project per AGSi file. The parent project, including the ultimate parent project, may be identified using the relevant attributes. "]
431#[doc = r""]
432#[doc = r" <details><summary>JSON schema</summary>"]
433#[doc = r""]
434#[doc = r" ```json"]
435#[doc = "{"]
436#[doc = "  \"description\": \"Metadata for the specific project/commission (the Project) under which this AGSi package has been delivered. There can be only one project per AGSi file. The parent project, including the ultimate parent project, may be identified using the relevant attributes. \","]
437#[doc = "  \"type\": \"object\","]
438#[doc = "  \"required\": ["]
439#[doc = "    \"projectName\""]
440#[doc = "  ],"]
441#[doc = "  \"properties\": {"]
442#[doc = "    \"agsProjectCodeSet\": {"]
443#[doc = "      \"description\": \"Array of embedded agsProjectCodeSet object(s)\","]
444#[doc = "      \"type\": \"array\","]
445#[doc = "      \"items\": {"]
446#[doc = "        \"$ref\": \"#/$defs/agsProjectCodeSet\""]
447#[doc = "      }"]
448#[doc = "    },"]
449#[doc = "    \"agsProjectCoordinateSystem\": {"]
450#[doc = "      \"description\": \"Array of embedded agsProjectCoordinateSystem object(s)\","]
451#[doc = "      \"type\": \"array\","]
452#[doc = "      \"items\": {"]
453#[doc = "        \"$ref\": \"#/$defs/agsProjectCoordinateSystem\""]
454#[doc = "      }"]
455#[doc = "    },"]
456#[doc = "    \"agsProjectDocumentSet\": {"]
457#[doc = "      \"description\": \"Array of embedded agsProjectDocumentSet object(s)\","]
458#[doc = "      \"type\": \"array\","]
459#[doc = "      \"items\": {"]
460#[doc = "        \"$ref\": \"#/$defs/agsProjectDocumentSet\""]
461#[doc = "      }"]
462#[doc = "    },"]
463#[doc = "    \"agsProjectInvestigation\": {"]
464#[doc = "      \"description\": \"Array of embedded agsProjectInvestigation object(s)\","]
465#[doc = "      \"type\": \"array\","]
466#[doc = "      \"items\": {"]
467#[doc = "        \"$ref\": \"#/$defs/agsProjectInvestigation\""]
468#[doc = "      }"]
469#[doc = "    },"]
470#[doc = "    \"briefDocumentSetID\": {"]
471#[doc = "      \"description\": \"Reference to the brief and/or specification for the project, details of which should be provided by way of an agsProjectDocumentSet object.\","]
472#[doc = "      \"type\": \"string\","]
473#[doc = "      \"example\": \"ExampleDocSetID\""]
474#[doc = "    },"]
475#[doc = "    \"client\": {"]
476#[doc = "      \"description\": \"Client for the Project.\","]
477#[doc = "      \"type\": \"string\","]
478#[doc = "      \"example\": \"XYZ D&B Contractor\""]
479#[doc = "    },"]
480#[doc = "    \"clientProjectID\": {"]
481#[doc = "      \"description\": \"Identifier for this Project used by the client. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. \","]
482#[doc = "      \"type\": \"string\","]
483#[doc = "      \"example\": \"C999/ABC\""]
484#[doc = "    },"]
485#[doc = "    \"description\": {"]
486#[doc = "      \"description\": \"Brief project description.\","]
487#[doc = "      \"type\": \"string\","]
488#[doc = "      \"example\": \"Stage 3 sitewide ground modelling, including incorporation of new 2018 GI data.\""]
489#[doc = "    },"]
490#[doc = "    \"parentProjectName\": {"]
491#[doc = "      \"description\": \"If applicable, the parent project/commission under which the Project has been procured, or which the Project reports to.\","]
492#[doc = "      \"type\": \"string\","]
493#[doc = "      \"example\": \"C999 Area A Phase 1 Design and Build\""]
494#[doc = "    },"]
495#[doc = "    \"producer\": {"]
496#[doc = "      \"description\": \"Organisation employed by the client responsible for the Project.\","]
497#[doc = "      \"type\": \"string\","]
498#[doc = "      \"example\": \"ABC Consultants\""]
499#[doc = "    },"]
500#[doc = "    \"producerProjectID\": {"]
501#[doc = "      \"description\": \"Identifier for this Project used by the producer of this file. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. \","]
502#[doc = "      \"type\": \"string\","]
503#[doc = "      \"example\": \"P12345\""]
504#[doc = "    },"]
505#[doc = "    \"producerSuppliers\": {"]
506#[doc = "      \"description\": \"If applicable, subconsultant(s) or subcontractor(s) employed  on the Project. Typically only include suppliers with direct involvement in producing the data included in this file. Input required as a text string not an array.\","]
507#[doc = "      \"type\": \"string\","]
508#[doc = "      \"example\": \"Acme Environmental, AN Other Organisation\""]
509#[doc = "    },"]
510#[doc = "    \"projectCountry\": {"]
511#[doc = "      \"description\": \"Normally the country in which the ultimate project is taking place.\","]
512#[doc = "      \"type\": \"string\","]
513#[doc = "      \"example\": \"United Kingdom\""]
514#[doc = "    },"]
515#[doc = "    \"projectName\": {"]
516#[doc = "      \"description\": \"Name of the specific project/commission for the Project.\","]
517#[doc = "      \"type\": \"string\","]
518#[doc = "      \"minLength\": 1,"]
519#[doc = "      \"example\": \"C999 Geotechnical Package X\""]
520#[doc = "    },"]
521#[doc = "    \"projectUUID\": {"]
522#[doc = "      \"description\": \"Universal/global unique identifier (UUID) for the project. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. Other attributes should be used for IDs specific to the producer and/or client (see below).\","]
523#[doc = "      \"type\": \"string\","]
524#[doc = "      \"example\": \"f7884d64-77ae-4eaf-b223-13c21bc2504b\""]
525#[doc = "    },"]
526#[doc = "    \"remarks\": {"]
527#[doc = "      \"description\": \"Additional remarks if required.\","]
528#[doc = "      \"type\": \"string\","]
529#[doc = "      \"example\": \"Some remarks if required\""]
530#[doc = "    },"]
531#[doc = "    \"reportDocumentSetID\": {"]
532#[doc = "      \"description\": \"Reference to report(s) and other documentation produced as part of this project and identified as supporting files. \","]
533#[doc = "      \"type\": \"string\","]
534#[doc = "      \"example\": \"ExampleDocSetID\""]
535#[doc = "    },"]
536#[doc = "    \"ultimateProjectClient\": {"]
537#[doc = "      \"description\": \"Client for the top level parent project.\","]
538#[doc = "      \"type\": \"string\","]
539#[doc = "      \"example\": \"City Transport Authority\""]
540#[doc = "    },"]
541#[doc = "    \"ultimateProjectName\": {"]
542#[doc = "      \"description\": \"If applicable, the top level parent project that the Project is ultimately for. Typically the works that are to be constructed, or a framework.\","]
543#[doc = "      \"type\": \"string\","]
544#[doc = "      \"example\": \"Gotham City Metro Purple Line\""]
545#[doc = "    }"]
546#[doc = "  },"]
547#[doc = "  \"additionalProperties\": false"]
548#[doc = "}"]
549#[doc = r" ```"]
550#[doc = r" </details>"]
551#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
552#[serde(deny_unknown_fields)]
553pub struct AgsProject {
554    #[doc = "Array of embedded agsProjectCodeSet object(s)"]
555    #[serde(
556        rename = "agsProjectCodeSet",
557        default,
558        skip_serializing_if = "::std::vec::Vec::is_empty"
559    )]
560    pub ags_project_code_set: ::std::vec::Vec<AgsProjectCodeSet>,
561    #[doc = "Array of embedded agsProjectCoordinateSystem object(s)"]
562    #[serde(
563        rename = "agsProjectCoordinateSystem",
564        default,
565        skip_serializing_if = "::std::vec::Vec::is_empty"
566    )]
567    pub ags_project_coordinate_system: ::std::vec::Vec<AgsProjectCoordinateSystem>,
568    #[doc = "Array of embedded agsProjectDocumentSet object(s)"]
569    #[serde(
570        rename = "agsProjectDocumentSet",
571        default,
572        skip_serializing_if = "::std::vec::Vec::is_empty"
573    )]
574    pub ags_project_document_set: ::std::vec::Vec<AgsProjectDocumentSet>,
575    #[doc = "Array of embedded agsProjectInvestigation object(s)"]
576    #[serde(
577        rename = "agsProjectInvestigation",
578        default,
579        skip_serializing_if = "::std::vec::Vec::is_empty"
580    )]
581    pub ags_project_investigation: ::std::vec::Vec<AgsProjectInvestigation>,
582    #[doc = "Reference to the brief and/or specification for the project, details of which should be provided by way of an agsProjectDocumentSet object."]
583    #[serde(
584        rename = "briefDocumentSetID",
585        default,
586        skip_serializing_if = "::std::option::Option::is_none"
587    )]
588    pub brief_document_set_id: ::std::option::Option<::std::string::String>,
589    #[doc = "Client for the Project."]
590    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
591    pub client: ::std::option::Option<::std::string::String>,
592    #[doc = "Identifier for this Project used by the client. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. "]
593    #[serde(
594        rename = "clientProjectID",
595        default,
596        skip_serializing_if = "::std::option::Option::is_none"
597    )]
598    pub client_project_id: ::std::option::Option<::std::string::String>,
599    #[doc = "Brief project description."]
600    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
601    pub description: ::std::option::Option<::std::string::String>,
602    #[doc = "If applicable, the parent project/commission under which the Project has been procured, or which the Project reports to."]
603    #[serde(
604        rename = "parentProjectName",
605        default,
606        skip_serializing_if = "::std::option::Option::is_none"
607    )]
608    pub parent_project_name: ::std::option::Option<::std::string::String>,
609    #[doc = "Organisation employed by the client responsible for the Project."]
610    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
611    pub producer: ::std::option::Option<::std::string::String>,
612    #[doc = "Identifier for this Project used by the producer of this file. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. "]
613    #[serde(
614        rename = "producerProjectID",
615        default,
616        skip_serializing_if = "::std::option::Option::is_none"
617    )]
618    pub producer_project_id: ::std::option::Option<::std::string::String>,
619    #[doc = "If applicable, subconsultant(s) or subcontractor(s) employed  on the Project. Typically only include suppliers with direct involvement in producing the data included in this file. Input required as a text string not an array."]
620    #[serde(
621        rename = "producerSuppliers",
622        default,
623        skip_serializing_if = "::std::option::Option::is_none"
624    )]
625    pub producer_suppliers: ::std::option::Option<::std::string::String>,
626    #[doc = "Normally the country in which the ultimate project is taking place."]
627    #[serde(
628        rename = "projectCountry",
629        default,
630        skip_serializing_if = "::std::option::Option::is_none"
631    )]
632    pub project_country: ::std::option::Option<::std::string::String>,
633    #[doc = "Name of the specific project/commission for the Project."]
634    #[serde(rename = "projectName")]
635    pub project_name: AgsProjectProjectName,
636    #[doc = "Universal/global unique identifier (UUID) for the project. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. Other attributes should be used for IDs specific to the producer and/or client (see below)."]
637    #[serde(
638        rename = "projectUUID",
639        default,
640        skip_serializing_if = "::std::option::Option::is_none"
641    )]
642    pub project_uuid: ::std::option::Option<::std::string::String>,
643    #[doc = "Additional remarks if required."]
644    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
645    pub remarks: ::std::option::Option<::std::string::String>,
646    #[doc = "Reference to report(s) and other documentation produced as part of this project and identified as supporting files. "]
647    #[serde(
648        rename = "reportDocumentSetID",
649        default,
650        skip_serializing_if = "::std::option::Option::is_none"
651    )]
652    pub report_document_set_id: ::std::option::Option<::std::string::String>,
653    #[doc = "Client for the top level parent project."]
654    #[serde(
655        rename = "ultimateProjectClient",
656        default,
657        skip_serializing_if = "::std::option::Option::is_none"
658    )]
659    pub ultimate_project_client: ::std::option::Option<::std::string::String>,
660    #[doc = "If applicable, the top level parent project that the Project is ultimately for. Typically the works that are to be constructed, or a framework."]
661    #[serde(
662        rename = "ultimateProjectName",
663        default,
664        skip_serializing_if = "::std::option::Option::is_none"
665    )]
666    pub ultimate_project_name: ::std::option::Option<::std::string::String>,
667}
668impl ::std::convert::From<&AgsProject> for AgsProject {
669    fn from(value: &AgsProject) -> Self {
670        value.clone()
671    }
672}
673impl AgsProject {
674    pub fn builder() -> builder::AgsProject {
675        Default::default()
676    }
677}
678#[doc = "Codes referenced by other parts of the schema such as the Data group objects (property and parameter codes) and Observation group objects (hole types, legend codes and geology codes). The codes may be project specific or from a standard list, e.g. AGSi standard code list or ABBR codes inherited from AGS factual data. Inclusion of standard AGSi code list or AGS ABBR codes used is optional (unless required by specification) provided that the code list used is identifed using agsProjectCodeSet. Refer to 3.2.4. Codes for Data objects and 3.2.5. Codes where use of AGS ABBR recommended for further details."]
679#[doc = r""]
680#[doc = r" <details><summary>JSON schema</summary>"]
681#[doc = r""]
682#[doc = r" ```json"]
683#[doc = "{"]
684#[doc = "  \"description\": \"Codes referenced by other parts of the schema such as the Data group objects (property and parameter codes) and Observation group objects (hole types, legend codes and geology codes). The codes may be project specific or from a standard list, e.g. AGSi standard code list or ABBR codes inherited from AGS factual data. Inclusion of standard AGSi code list or AGS ABBR codes used is optional (unless required by specification) provided that the code list used is identifed using agsProjectCodeSet. Refer to 3.2.4. Codes for Data objects and 3.2.5. Codes where use of AGS ABBR recommended for further details.\","]
685#[doc = "  \"type\": \"object\","]
686#[doc = "  \"required\": ["]
687#[doc = "    \"codeID\","]
688#[doc = "    \"description\""]
689#[doc = "  ],"]
690#[doc = "  \"properties\": {"]
691#[doc = "    \"codeID\": {"]
692#[doc = "      \"description\": \"Codes, including project specific codes, used in this AGSi file. All codes within each code set shall be unique. \","]
693#[doc = "      \"type\": \"string\","]
694#[doc = "      \"minLength\": 1,"]
695#[doc = "      \"example\": \"UndrainedShearStrength\""]
696#[doc = "    },"]
697#[doc = "    \"description\": {"]
698#[doc = "      \"description\": \"Short description of what the code represents.\","]
699#[doc = "      \"type\": \"string\","]
700#[doc = "      \"minLength\": 1,"]
701#[doc = "      \"example\": \"Undrained shear strength\""]
702#[doc = "    },"]
703#[doc = "    \"isStandard\": {"]
704#[doc = "      \"description\": \"true if code is from standard dictionary such as the AGSi code list. If omitted, should be assumed to be false, i.e. project specific or other non-standard code.\","]
705#[doc = "      \"type\": \"boolean\","]
706#[doc = "      \"example\": true"]
707#[doc = "    },"]
708#[doc = "    \"remarks\": {"]
709#[doc = "      \"description\": \"Additional remarks, if required.\","]
710#[doc = "      \"type\": \"string\","]
711#[doc = "      \"example\": \"Some additional remarks\""]
712#[doc = "    },"]
713#[doc = "    \"units\": {"]
714#[doc = "      \"description\": \"Units of measurement if code represents a property or parameter. \","]
715#[doc = "      \"type\": \"string\","]
716#[doc = "      \"example\": \"kPa\""]
717#[doc = "    }"]
718#[doc = "  },"]
719#[doc = "  \"additionalProperties\": false"]
720#[doc = "}"]
721#[doc = r" ```"]
722#[doc = r" </details>"]
723#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
724#[serde(deny_unknown_fields)]
725pub struct AgsProjectCode {
726    #[doc = "Codes, including project specific codes, used in this AGSi file. All codes within each code set shall be unique. "]
727    #[serde(rename = "codeID")]
728    pub code_id: AgsProjectCodeCodeId,
729    #[doc = "Short description of what the code represents."]
730    pub description: AgsProjectCodeDescription,
731    #[doc = "true if code is from standard dictionary such as the AGSi code list. If omitted, should be assumed to be false, i.e. project specific or other non-standard code."]
732    #[serde(
733        rename = "isStandard",
734        default,
735        skip_serializing_if = "::std::option::Option::is_none"
736    )]
737    pub is_standard: ::std::option::Option<bool>,
738    #[doc = "Additional remarks, if required."]
739    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
740    pub remarks: ::std::option::Option<::std::string::String>,
741    #[doc = "Units of measurement if code represents a property or parameter. "]
742    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
743    pub units: ::std::option::Option<::std::string::String>,
744}
745impl ::std::convert::From<&AgsProjectCode> for AgsProjectCode {
746    fn from(value: &AgsProjectCode) -> Self {
747        value.clone()
748    }
749}
750impl AgsProjectCode {
751    pub fn builder() -> builder::AgsProjectCode {
752        Default::default()
753    }
754}
755#[doc = "Codes, including project specific codes, used in this AGSi file. All codes within each code set shall be unique. "]
756#[doc = r""]
757#[doc = r" <details><summary>JSON schema</summary>"]
758#[doc = r""]
759#[doc = r" ```json"]
760#[doc = "{"]
761#[doc = "  \"description\": \"Codes, including project specific codes, used in this AGSi file. All codes within each code set shall be unique. \","]
762#[doc = "  \"type\": \"string\","]
763#[doc = "  \"minLength\": 1,"]
764#[doc = "  \"example\": \"UndrainedShearStrength\""]
765#[doc = "}"]
766#[doc = r" ```"]
767#[doc = r" </details>"]
768#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
769#[serde(transparent)]
770pub struct AgsProjectCodeCodeId(::std::string::String);
771impl ::std::ops::Deref for AgsProjectCodeCodeId {
772    type Target = ::std::string::String;
773    fn deref(&self) -> &::std::string::String {
774        &self.0
775    }
776}
777impl ::std::convert::From<AgsProjectCodeCodeId> for ::std::string::String {
778    fn from(value: AgsProjectCodeCodeId) -> Self {
779        value.0
780    }
781}
782impl ::std::convert::From<&AgsProjectCodeCodeId> for AgsProjectCodeCodeId {
783    fn from(value: &AgsProjectCodeCodeId) -> Self {
784        value.clone()
785    }
786}
787impl ::std::str::FromStr for AgsProjectCodeCodeId {
788    type Err = self::error::ConversionError;
789    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
790        if value.chars().count() < 1usize {
791            return Err("shorter than 1 characters".into());
792        }
793        Ok(Self(value.to_string()))
794    }
795}
796impl ::std::convert::TryFrom<&str> for AgsProjectCodeCodeId {
797    type Error = self::error::ConversionError;
798    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
799        value.parse()
800    }
801}
802impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCodeCodeId {
803    type Error = self::error::ConversionError;
804    fn try_from(
805        value: &::std::string::String,
806    ) -> ::std::result::Result<Self, self::error::ConversionError> {
807        value.parse()
808    }
809}
810impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCodeCodeId {
811    type Error = self::error::ConversionError;
812    fn try_from(
813        value: ::std::string::String,
814    ) -> ::std::result::Result<Self, self::error::ConversionError> {
815        value.parse()
816    }
817}
818impl<'de> ::serde::Deserialize<'de> for AgsProjectCodeCodeId {
819    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
820    where
821        D: ::serde::Deserializer<'de>,
822    {
823        ::std::string::String::deserialize(deserializer)?
824            .parse()
825            .map_err(|e: self::error::ConversionError| {
826                <D::Error as ::serde::de::Error>::custom(e.to_string())
827            })
828    }
829}
830#[doc = "Short description of what the code represents."]
831#[doc = r""]
832#[doc = r" <details><summary>JSON schema</summary>"]
833#[doc = r""]
834#[doc = r" ```json"]
835#[doc = "{"]
836#[doc = "  \"description\": \"Short description of what the code represents.\","]
837#[doc = "  \"type\": \"string\","]
838#[doc = "  \"minLength\": 1,"]
839#[doc = "  \"example\": \"Undrained shear strength\""]
840#[doc = "}"]
841#[doc = r" ```"]
842#[doc = r" </details>"]
843#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
844#[serde(transparent)]
845pub struct AgsProjectCodeDescription(::std::string::String);
846impl ::std::ops::Deref for AgsProjectCodeDescription {
847    type Target = ::std::string::String;
848    fn deref(&self) -> &::std::string::String {
849        &self.0
850    }
851}
852impl ::std::convert::From<AgsProjectCodeDescription> for ::std::string::String {
853    fn from(value: AgsProjectCodeDescription) -> Self {
854        value.0
855    }
856}
857impl ::std::convert::From<&AgsProjectCodeDescription> for AgsProjectCodeDescription {
858    fn from(value: &AgsProjectCodeDescription) -> Self {
859        value.clone()
860    }
861}
862impl ::std::str::FromStr for AgsProjectCodeDescription {
863    type Err = self::error::ConversionError;
864    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
865        if value.chars().count() < 1usize {
866            return Err("shorter than 1 characters".into());
867        }
868        Ok(Self(value.to_string()))
869    }
870}
871impl ::std::convert::TryFrom<&str> for AgsProjectCodeDescription {
872    type Error = self::error::ConversionError;
873    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
874        value.parse()
875    }
876}
877impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCodeDescription {
878    type Error = self::error::ConversionError;
879    fn try_from(
880        value: &::std::string::String,
881    ) -> ::std::result::Result<Self, self::error::ConversionError> {
882        value.parse()
883    }
884}
885impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCodeDescription {
886    type Error = self::error::ConversionError;
887    fn try_from(
888        value: ::std::string::String,
889    ) -> ::std::result::Result<Self, self::error::ConversionError> {
890        value.parse()
891    }
892}
893impl<'de> ::serde::Deserialize<'de> for AgsProjectCodeDescription {
894    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
895    where
896        D: ::serde::Deserializer<'de>,
897    {
898        ::std::string::String::deserialize(deserializer)?
899            .parse()
900            .map_err(|e: self::error::ConversionError| {
901                <D::Error as ::serde::de::Error>::custom(e.to_string())
902            })
903    }
904}
905#[doc = "Sets of codes referenced by other parts of the schema such as the Data group objects (property and parameter codes) and Observation group objects (hole types, legend codes and geology codes). The codes may be project specific or from a standard list, e.g. AGSi standard code list or ABBR codes inherited from AGS factual data. An agsProjectCodeSet object is required for each object attribute using a set of codes. The codes for each code set are defined using embedded agsProjectCode objects or found at the external source specified in this object. Refer to 3.2.4. Codes for Data objects and 3.2.5. Codes where use of AGS ABBR recommended for further details."]
906#[doc = r""]
907#[doc = r" <details><summary>JSON schema</summary>"]
908#[doc = r""]
909#[doc = r" ```json"]
910#[doc = "{"]
911#[doc = "  \"description\": \"Sets of codes referenced by other parts of the schema such as the Data group objects (property and parameter codes) and Observation group objects (hole types, legend codes and geology codes). The codes may be project specific or from a standard list, e.g. AGSi standard code list or ABBR codes inherited from AGS factual data. An agsProjectCodeSet object is required for each object attribute using a set of codes. The codes for each code set are defined using embedded agsProjectCode objects or found at the external source specified in this object. Refer to 3.2.4. Codes for Data objects and 3.2.5. Codes where use of AGS ABBR recommended for further details.\","]
912#[doc = "  \"type\": \"object\","]
913#[doc = "  \"required\": ["]
914#[doc = "    \"usedByAttribute\","]
915#[doc = "    \"usedByObject\""]
916#[doc = "  ],"]
917#[doc = "  \"properties\": {"]
918#[doc = "    \"agsProjectCode\": {"]
919#[doc = "      \"description\": \"Array of embedded agsProjectCode object(s).\","]
920#[doc = "      \"type\": \"array\","]
921#[doc = "      \"items\": {"]
922#[doc = "        \"$ref\": \"#/$defs/agsProjectCode\""]
923#[doc = "      }"]
924#[doc = "    },"]
925#[doc = "    \"codeSetID\": {"]
926#[doc = "      \"description\": \"Identifier for this code set. May be local to this file or a UUID as required/specified.  This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity.  If used, identifiers for codeSetID should be unique within the AGSi file. \","]
927#[doc = "      \"type\": \"string\","]
928#[doc = "      \"example\": \"CodeSetParameter\""]
929#[doc = "    },"]
930#[doc = "    \"concatenationAllow\": {"]
931#[doc = "      \"description\": \"true if concatenation of any combination of codes in the list is permitted, e.g. composite exploratory hole types when using AGS ABBR codes. Assume false (not permitted) if attribute omitted.\","]
932#[doc = "      \"type\": \"boolean\","]
933#[doc = "      \"example\": false"]
934#[doc = "    },"]
935#[doc = "    \"concatenationCharacter\": {"]
936#[doc = "      \"description\": \"Linking character(s) used for concatenation, if permitted. Input blank string if none. \","]
937#[doc = "      \"type\": \"string\","]
938#[doc = "      \"example\": \"+\""]
939#[doc = "    },"]
940#[doc = "    \"description\": {"]
941#[doc = "      \"description\": \"Name or short description of the code set.\","]
942#[doc = "      \"type\": \"string\","]
943#[doc = "      \"example\": \"Parameter codes\""]
944#[doc = "    },"]
945#[doc = "    \"remarks\": {"]
946#[doc = "      \"description\": \"Additional remarks, if required.\","]
947#[doc = "      \"type\": \"string\","]
948#[doc = "      \"example\": \"Some additional remarks\""]
949#[doc = "    },"]
950#[doc = "    \"sourceDescription\": {"]
951#[doc = "      \"description\": \"Description of the source of the list of codes to be used for this set, if applicable. This could be a published source, a project reference or a file provided within the AGSi package. For properties or parameters, use of the  AGSi code list is recommended, but it can be changed to an alternate list, e.g. lists published by other agencies (UK or overseas) or major projects/clientsOptional if the codes are provided as agsProjectCode objects.\","]
952#[doc = "      \"type\": \"string\","]
953#[doc = "      \"example\": \"AGSi standard code list\""]
954#[doc = "    },"]
955#[doc = "    \"sourceURI\": {"]
956#[doc = "      \"description\": \"URI-reference link to source of list of codes to be used for this set, if applicable. This could be a published source, link to a project reference, or a file provided within the AGSi package. For properties or parameters, use of the AGSi code list is recommended, but it can be changed to an alternate list, e.g. lists published by other agencies (UK or overseas) or major projects/clients. Optional if the codes are provided as agsProjectCode objects. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names.\","]
957#[doc = "      \"type\": \"string\","]
958#[doc = "      \"format\": \"uri-reference\","]
959#[doc = "      \"example\": \"https://ags-data-format-wg.gitlab.io/agsi/agsi_standard/1.0.1/Codes_Codelist/\""]
960#[doc = "    },"]
961#[doc = "    \"usedByAttribute\": {"]
962#[doc = "      \"description\": \"Name of the attribute of the AGSi object that references this code set.\","]
963#[doc = "      \"type\": \"string\","]
964#[doc = "      \"minLength\": 1,"]
965#[doc = "      \"example\": \"codeID\""]
966#[doc = "    },"]
967#[doc = "    \"usedByObject\": {"]
968#[doc = "      \"description\": \"Name of the AGSi object that references this code set.\","]
969#[doc = "      \"type\": \"string\","]
970#[doc = "      \"minLength\": 1,"]
971#[doc = "      \"example\": \"agsiDataParameterValue\""]
972#[doc = "    }"]
973#[doc = "  },"]
974#[doc = "  \"additionalProperties\": false"]
975#[doc = "}"]
976#[doc = r" ```"]
977#[doc = r" </details>"]
978#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
979#[serde(deny_unknown_fields)]
980pub struct AgsProjectCodeSet {
981    #[doc = "Array of embedded agsProjectCode object(s)."]
982    #[serde(
983        rename = "agsProjectCode",
984        default,
985        skip_serializing_if = "::std::vec::Vec::is_empty"
986    )]
987    pub ags_project_code: ::std::vec::Vec<AgsProjectCode>,
988    #[doc = "Identifier for this code set. May be local to this file or a UUID as required/specified.  This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity.  If used, identifiers for codeSetID should be unique within the AGSi file. "]
989    #[serde(
990        rename = "codeSetID",
991        default,
992        skip_serializing_if = "::std::option::Option::is_none"
993    )]
994    pub code_set_id: ::std::option::Option<::std::string::String>,
995    #[doc = "true if concatenation of any combination of codes in the list is permitted, e.g. composite exploratory hole types when using AGS ABBR codes. Assume false (not permitted) if attribute omitted."]
996    #[serde(
997        rename = "concatenationAllow",
998        default,
999        skip_serializing_if = "::std::option::Option::is_none"
1000    )]
1001    pub concatenation_allow: ::std::option::Option<bool>,
1002    #[doc = "Linking character(s) used for concatenation, if permitted. Input blank string if none. "]
1003    #[serde(
1004        rename = "concatenationCharacter",
1005        default,
1006        skip_serializing_if = "::std::option::Option::is_none"
1007    )]
1008    pub concatenation_character: ::std::option::Option<::std::string::String>,
1009    #[doc = "Name or short description of the code set."]
1010    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1011    pub description: ::std::option::Option<::std::string::String>,
1012    #[doc = "Additional remarks, if required."]
1013    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1014    pub remarks: ::std::option::Option<::std::string::String>,
1015    #[doc = "Description of the source of the list of codes to be used for this set, if applicable. This could be a published source, a project reference or a file provided within the AGSi package. For properties or parameters, use of the  AGSi code list is recommended, but it can be changed to an alternate list, e.g. lists published by other agencies (UK or overseas) or major projects/clientsOptional if the codes are provided as agsProjectCode objects."]
1016    #[serde(
1017        rename = "sourceDescription",
1018        default,
1019        skip_serializing_if = "::std::option::Option::is_none"
1020    )]
1021    pub source_description: ::std::option::Option<::std::string::String>,
1022    #[doc = "URI-reference link to source of list of codes to be used for this set, if applicable. This could be a published source, link to a project reference, or a file provided within the AGSi package. For properties or parameters, use of the AGSi code list is recommended, but it can be changed to an alternate list, e.g. lists published by other agencies (UK or overseas) or major projects/clients. Optional if the codes are provided as agsProjectCode objects. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names."]
1023    #[serde(
1024        rename = "sourceURI",
1025        default,
1026        skip_serializing_if = "::std::option::Option::is_none"
1027    )]
1028    pub source_uri: ::std::option::Option<::std::string::String>,
1029    #[doc = "Name of the attribute of the AGSi object that references this code set."]
1030    #[serde(rename = "usedByAttribute")]
1031    pub used_by_attribute: AgsProjectCodeSetUsedByAttribute,
1032    #[doc = "Name of the AGSi object that references this code set."]
1033    #[serde(rename = "usedByObject")]
1034    pub used_by_object: AgsProjectCodeSetUsedByObject,
1035}
1036impl ::std::convert::From<&AgsProjectCodeSet> for AgsProjectCodeSet {
1037    fn from(value: &AgsProjectCodeSet) -> Self {
1038        value.clone()
1039    }
1040}
1041impl AgsProjectCodeSet {
1042    pub fn builder() -> builder::AgsProjectCodeSet {
1043        Default::default()
1044    }
1045}
1046#[doc = "Name of the attribute of the AGSi object that references this code set."]
1047#[doc = r""]
1048#[doc = r" <details><summary>JSON schema</summary>"]
1049#[doc = r""]
1050#[doc = r" ```json"]
1051#[doc = "{"]
1052#[doc = "  \"description\": \"Name of the attribute of the AGSi object that references this code set.\","]
1053#[doc = "  \"type\": \"string\","]
1054#[doc = "  \"minLength\": 1,"]
1055#[doc = "  \"example\": \"codeID\""]
1056#[doc = "}"]
1057#[doc = r" ```"]
1058#[doc = r" </details>"]
1059#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1060#[serde(transparent)]
1061pub struct AgsProjectCodeSetUsedByAttribute(::std::string::String);
1062impl ::std::ops::Deref for AgsProjectCodeSetUsedByAttribute {
1063    type Target = ::std::string::String;
1064    fn deref(&self) -> &::std::string::String {
1065        &self.0
1066    }
1067}
1068impl ::std::convert::From<AgsProjectCodeSetUsedByAttribute> for ::std::string::String {
1069    fn from(value: AgsProjectCodeSetUsedByAttribute) -> Self {
1070        value.0
1071    }
1072}
1073impl ::std::convert::From<&AgsProjectCodeSetUsedByAttribute> for AgsProjectCodeSetUsedByAttribute {
1074    fn from(value: &AgsProjectCodeSetUsedByAttribute) -> Self {
1075        value.clone()
1076    }
1077}
1078impl ::std::str::FromStr for AgsProjectCodeSetUsedByAttribute {
1079    type Err = self::error::ConversionError;
1080    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1081        if value.chars().count() < 1usize {
1082            return Err("shorter than 1 characters".into());
1083        }
1084        Ok(Self(value.to_string()))
1085    }
1086}
1087impl ::std::convert::TryFrom<&str> for AgsProjectCodeSetUsedByAttribute {
1088    type Error = self::error::ConversionError;
1089    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1090        value.parse()
1091    }
1092}
1093impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCodeSetUsedByAttribute {
1094    type Error = self::error::ConversionError;
1095    fn try_from(
1096        value: &::std::string::String,
1097    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1098        value.parse()
1099    }
1100}
1101impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCodeSetUsedByAttribute {
1102    type Error = self::error::ConversionError;
1103    fn try_from(
1104        value: ::std::string::String,
1105    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1106        value.parse()
1107    }
1108}
1109impl<'de> ::serde::Deserialize<'de> for AgsProjectCodeSetUsedByAttribute {
1110    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
1111    where
1112        D: ::serde::Deserializer<'de>,
1113    {
1114        ::std::string::String::deserialize(deserializer)?
1115            .parse()
1116            .map_err(|e: self::error::ConversionError| {
1117                <D::Error as ::serde::de::Error>::custom(e.to_string())
1118            })
1119    }
1120}
1121#[doc = "Name of the AGSi object that references this code set."]
1122#[doc = r""]
1123#[doc = r" <details><summary>JSON schema</summary>"]
1124#[doc = r""]
1125#[doc = r" ```json"]
1126#[doc = "{"]
1127#[doc = "  \"description\": \"Name of the AGSi object that references this code set.\","]
1128#[doc = "  \"type\": \"string\","]
1129#[doc = "  \"minLength\": 1,"]
1130#[doc = "  \"example\": \"agsiDataParameterValue\""]
1131#[doc = "}"]
1132#[doc = r" ```"]
1133#[doc = r" </details>"]
1134#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1135#[serde(transparent)]
1136pub struct AgsProjectCodeSetUsedByObject(::std::string::String);
1137impl ::std::ops::Deref for AgsProjectCodeSetUsedByObject {
1138    type Target = ::std::string::String;
1139    fn deref(&self) -> &::std::string::String {
1140        &self.0
1141    }
1142}
1143impl ::std::convert::From<AgsProjectCodeSetUsedByObject> for ::std::string::String {
1144    fn from(value: AgsProjectCodeSetUsedByObject) -> Self {
1145        value.0
1146    }
1147}
1148impl ::std::convert::From<&AgsProjectCodeSetUsedByObject> for AgsProjectCodeSetUsedByObject {
1149    fn from(value: &AgsProjectCodeSetUsedByObject) -> Self {
1150        value.clone()
1151    }
1152}
1153impl ::std::str::FromStr for AgsProjectCodeSetUsedByObject {
1154    type Err = self::error::ConversionError;
1155    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1156        if value.chars().count() < 1usize {
1157            return Err("shorter than 1 characters".into());
1158        }
1159        Ok(Self(value.to_string()))
1160    }
1161}
1162impl ::std::convert::TryFrom<&str> for AgsProjectCodeSetUsedByObject {
1163    type Error = self::error::ConversionError;
1164    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1165        value.parse()
1166    }
1167}
1168impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCodeSetUsedByObject {
1169    type Error = self::error::ConversionError;
1170    fn try_from(
1171        value: &::std::string::String,
1172    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1173        value.parse()
1174    }
1175}
1176impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCodeSetUsedByObject {
1177    type Error = self::error::ConversionError;
1178    fn try_from(
1179        value: ::std::string::String,
1180    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1181        value.parse()
1182    }
1183}
1184impl<'de> ::serde::Deserialize<'de> for AgsProjectCodeSetUsedByObject {
1185    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
1186    where
1187        D: ::serde::Deserializer<'de>,
1188    {
1189        ::std::string::String::deserialize(deserializer)?
1190            .parse()
1191            .map_err(|e: self::error::ConversionError| {
1192                <D::Error as ::serde::de::Error>::custom(e.to_string())
1193            })
1194    }
1195}
1196#[doc = "Defines the spatial coordinate system(s) used by the models. The coordinate system(s) used by the model is considered to be the model coordinate system, although this could be an established regional or national system. A secondary global coordinate system, which will normally be an established regional or national system, may also be defined (for each model system) but this will only exist via transformation from the model coordinate system. Refer to 3.2.2. Coordinate systems for further details."]
1197#[doc = r""]
1198#[doc = r" <details><summary>JSON schema</summary>"]
1199#[doc = r""]
1200#[doc = r" ```json"]
1201#[doc = "{"]
1202#[doc = "  \"description\": \"Defines the spatial coordinate system(s) used by the models. The coordinate system(s) used by the model is considered to be the model coordinate system, although this could be an established regional or national system. A secondary global coordinate system, which will normally be an established regional or national system, may also be defined (for each model system) but this will only exist via transformation from the model coordinate system. Refer to 3.2.2. Coordinate systems for further details.\","]
1203#[doc = "  \"type\": \"object\","]
1204#[doc = "  \"required\": ["]
1205#[doc = "    \"axisUnitsXY\","]
1206#[doc = "    \"axisUnitsZ\""]
1207#[doc = "  ],"]
1208#[doc = "  \"properties\": {"]
1209#[doc = "    \"axisNameX\": {"]
1210#[doc = "      \"description\": \"Axis name for X axis of model coordinate system.\","]
1211#[doc = "      \"type\": \"string\","]
1212#[doc = "      \"example\": \"Easting\""]
1213#[doc = "    },"]
1214#[doc = "    \"axisNameY\": {"]
1215#[doc = "      \"description\": \"Axis name for Y axis of model coordinate system.\","]
1216#[doc = "      \"type\": \"string\","]
1217#[doc = "      \"example\": \"Northing\""]
1218#[doc = "    },"]
1219#[doc = "    \"axisNameZ\": {"]
1220#[doc = "      \"description\": \"Axis name for Z axis of model coordinate system.\","]
1221#[doc = "      \"type\": \"string\","]
1222#[doc = "      \"example\": \"Elevation\""]
1223#[doc = "    },"]
1224#[doc = "    \"axisUnitsXY\": {"]
1225#[doc = "      \"description\": \"Units for X and Y axis (or X axis only if no Y axis). Units are considered to be case sensitive.\","]
1226#[doc = "      \"type\": \"string\","]
1227#[doc = "      \"minLength\": 1,"]
1228#[doc = "      \"example\": \"m\""]
1229#[doc = "    },"]
1230#[doc = "    \"axisUnitsZ\": {"]
1231#[doc = "      \"description\": \"Units for Z axis (elevation). May include optional prefix and/or suffix as commonly used to identify the datum used. Considered to be case sensitive.\","]
1232#[doc = "      \"type\": \"string\","]
1233#[doc = "      \"minLength\": 1,"]
1234#[doc = "      \"example\": \"mOD\""]
1235#[doc = "    },"]
1236#[doc = "    \"description\": {"]
1237#[doc = "      \"description\": \"Name or short description for this coordinate system.\","]
1238#[doc = "      \"type\": \"string\","]
1239#[doc = "      \"example\": \"3D model coordinate system: Gotham Metro Grid + OS elevations\""]
1240#[doc = "    },"]
1241#[doc = "    \"globalXYSystem\": {"]
1242#[doc = "      \"description\": \"Recognised national or regional horizontal coordinate system that the model coordinate system can be mapped to. This is intended to facilitate coordination with data sets in alternative systems and, in particular, encourage legacy use from archive. Transformation information provided in relevant attributes.\","]
1243#[doc = "      \"type\": \"string\","]
1244#[doc = "      \"example\": \"British National Grid\""]
1245#[doc = "    },"]
1246#[doc = "    \"globalZSystem\": {"]
1247#[doc = "      \"description\": \"Recognised national or regional vertical coordinate system that the model coordinate system can be mapped to. This is intended to facilitate coordination with data sets in alternative systems and, in particular, encourage legacy use from archive. Transformation information provided in relevant attributes.\","]
1248#[doc = "      \"type\": \"string\","]
1249#[doc = "      \"example\": \"Ordnance Datum Newlyn\""]
1250#[doc = "    },"]
1251#[doc = "    \"remarks\": {"]
1252#[doc = "      \"description\": \"Additional remarks if required.\","]
1253#[doc = "      \"type\": \"string\","]
1254#[doc = "      \"example\": \"Some remarks if required\""]
1255#[doc = "    },"]
1256#[doc = "    \"systemID\": {"]
1257#[doc = "      \"description\": \"Identifier for this coordinate system.  May be local to this file or a UUID as required/specified. May be referenced by agsiModel. Identifiers for systemID shall be unique within an AGSi file. Optional if only one system is being used. \","]
1258#[doc = "      \"type\": \"string\","]
1259#[doc = "      \"example\": \"MetroXYZ\""]
1260#[doc = "    },"]
1261#[doc = "    \"systemNameXY\": {"]
1262#[doc = "      \"description\": \"Name/description of horizontal coordinate (XY) reference system used for  model coordinate system.\","]
1263#[doc = "      \"type\": \"string\","]
1264#[doc = "      \"example\": \"Gotham Metro Grid\""]
1265#[doc = "    },"]
1266#[doc = "    \"systemNameZ\": {"]
1267#[doc = "      \"description\": \"Name/description of vertical coordinate (Z) reference system used for  model coordinate system.\","]
1268#[doc = "      \"type\": \"string\","]
1269#[doc = "      \"example\": \"Ordnance Datum Newlyn\""]
1270#[doc = "    },"]
1271#[doc = "    \"systemType\": {"]
1272#[doc = "      \"description\": \"Type of system. Only cartesian systems fully supported at present: XYZ (3D), XZ (2D vertical section), XY (2D map), Z (elevation only, i.e. simple layer profiles). For other types of system input other and describe in description.\","]
1273#[doc = "      \"type\": \"string\","]
1274#[doc = "      \"enum\": ["]
1275#[doc = "        \"XYZ\","]
1276#[doc = "        \"XZ\","]
1277#[doc = "        \"XY\","]
1278#[doc = "        \"Z\","]
1279#[doc = "        \"other\""]
1280#[doc = "      ],"]
1281#[doc = "      \"example\": \"XYZ\""]
1282#[doc = "    },"]
1283#[doc = "    \"transformShiftX\": {"]
1284#[doc = "      \"description\": \"Shift in X (or Easting) direction of origin of model coordinate system relative to global coordinate system, i.e. X value of the model origin in the global system.\","]
1285#[doc = "      \"type\": \"number\","]
1286#[doc = "      \"example\": 450000"]
1287#[doc = "    },"]
1288#[doc = "    \"transformShiftY\": {"]
1289#[doc = "      \"description\": \"Shift in Y (or Northing) direction of origin of model coordinate system relative to global coordinate system, i.e. Y value of the model origin in the global system.\","]
1290#[doc = "      \"type\": \"number\","]
1291#[doc = "      \"example\": 125000"]
1292#[doc = "    },"]
1293#[doc = "    \"transformShiftZ\": {"]
1294#[doc = "      \"description\": \"Shift in Z (or Elevation) direction of origin of model coordinate system relative to global coordinate system, i.e. Z value of the model origin in the global system.\","]
1295#[doc = "      \"type\": \"number\","]
1296#[doc = "      \"example\": -100"]
1297#[doc = "    },"]
1298#[doc = "    \"transformXYRotation\": {"]
1299#[doc = "      \"description\": \"Rotation in anticlockwise direction of model coordinate system XY axes relative to global coordinate system XY axes. Units of rotation are decimal degrees. \","]
1300#[doc = "      \"type\": \"number\","]
1301#[doc = "      \"example\": 1.44450116"]
1302#[doc = "    },"]
1303#[doc = "    \"transformXYScaleFactor\": {"]
1304#[doc = "      \"description\": \"Scale factor as ratio of distance in global coordinate system to model coordinate system, i.e. global distance divided by model distance.\","]
1305#[doc = "      \"type\": \"number\","]
1306#[doc = "      \"example\": 0.9999745653"]
1307#[doc = "    }"]
1308#[doc = "  },"]
1309#[doc = "  \"additionalProperties\": false"]
1310#[doc = "}"]
1311#[doc = r" ```"]
1312#[doc = r" </details>"]
1313#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
1314#[serde(deny_unknown_fields)]
1315pub struct AgsProjectCoordinateSystem {
1316    #[doc = "Axis name for X axis of model coordinate system."]
1317    #[serde(
1318        rename = "axisNameX",
1319        default,
1320        skip_serializing_if = "::std::option::Option::is_none"
1321    )]
1322    pub axis_name_x: ::std::option::Option<::std::string::String>,
1323    #[doc = "Axis name for Y axis of model coordinate system."]
1324    #[serde(
1325        rename = "axisNameY",
1326        default,
1327        skip_serializing_if = "::std::option::Option::is_none"
1328    )]
1329    pub axis_name_y: ::std::option::Option<::std::string::String>,
1330    #[doc = "Axis name for Z axis of model coordinate system."]
1331    #[serde(
1332        rename = "axisNameZ",
1333        default,
1334        skip_serializing_if = "::std::option::Option::is_none"
1335    )]
1336    pub axis_name_z: ::std::option::Option<::std::string::String>,
1337    #[doc = "Units for X and Y axis (or X axis only if no Y axis). Units are considered to be case sensitive."]
1338    #[serde(rename = "axisUnitsXY")]
1339    pub axis_units_xy: AgsProjectCoordinateSystemAxisUnitsXy,
1340    #[doc = "Units for Z axis (elevation). May include optional prefix and/or suffix as commonly used to identify the datum used. Considered to be case sensitive."]
1341    #[serde(rename = "axisUnitsZ")]
1342    pub axis_units_z: AgsProjectCoordinateSystemAxisUnitsZ,
1343    #[doc = "Name or short description for this coordinate system."]
1344    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1345    pub description: ::std::option::Option<::std::string::String>,
1346    #[doc = "Recognised national or regional horizontal coordinate system that the model coordinate system can be mapped to. This is intended to facilitate coordination with data sets in alternative systems and, in particular, encourage legacy use from archive. Transformation information provided in relevant attributes."]
1347    #[serde(
1348        rename = "globalXYSystem",
1349        default,
1350        skip_serializing_if = "::std::option::Option::is_none"
1351    )]
1352    pub global_xy_system: ::std::option::Option<::std::string::String>,
1353    #[doc = "Recognised national or regional vertical coordinate system that the model coordinate system can be mapped to. This is intended to facilitate coordination with data sets in alternative systems and, in particular, encourage legacy use from archive. Transformation information provided in relevant attributes."]
1354    #[serde(
1355        rename = "globalZSystem",
1356        default,
1357        skip_serializing_if = "::std::option::Option::is_none"
1358    )]
1359    pub global_z_system: ::std::option::Option<::std::string::String>,
1360    #[doc = "Additional remarks if required."]
1361    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1362    pub remarks: ::std::option::Option<::std::string::String>,
1363    #[doc = "Identifier for this coordinate system.  May be local to this file or a UUID as required/specified. May be referenced by agsiModel. Identifiers for systemID shall be unique within an AGSi file. Optional if only one system is being used. "]
1364    #[serde(
1365        rename = "systemID",
1366        default,
1367        skip_serializing_if = "::std::option::Option::is_none"
1368    )]
1369    pub system_id: ::std::option::Option<::std::string::String>,
1370    #[doc = "Name/description of horizontal coordinate (XY) reference system used for  model coordinate system."]
1371    #[serde(
1372        rename = "systemNameXY",
1373        default,
1374        skip_serializing_if = "::std::option::Option::is_none"
1375    )]
1376    pub system_name_xy: ::std::option::Option<::std::string::String>,
1377    #[doc = "Name/description of vertical coordinate (Z) reference system used for  model coordinate system."]
1378    #[serde(
1379        rename = "systemNameZ",
1380        default,
1381        skip_serializing_if = "::std::option::Option::is_none"
1382    )]
1383    pub system_name_z: ::std::option::Option<::std::string::String>,
1384    #[doc = "Type of system. Only cartesian systems fully supported at present: XYZ (3D), XZ (2D vertical section), XY (2D map), Z (elevation only, i.e. simple layer profiles). For other types of system input other and describe in description."]
1385    #[serde(
1386        rename = "systemType",
1387        default,
1388        skip_serializing_if = "::std::option::Option::is_none"
1389    )]
1390    pub system_type: ::std::option::Option<AgsProjectCoordinateSystemSystemType>,
1391    #[serde(
1392        rename = "transformShiftX",
1393        default,
1394        skip_serializing_if = "::std::option::Option::is_none"
1395    )]
1396    pub transform_shift_x: ::std::option::Option<f64>,
1397    #[serde(
1398        rename = "transformShiftY",
1399        default,
1400        skip_serializing_if = "::std::option::Option::is_none"
1401    )]
1402    pub transform_shift_y: ::std::option::Option<f64>,
1403    #[serde(
1404        rename = "transformShiftZ",
1405        default,
1406        skip_serializing_if = "::std::option::Option::is_none"
1407    )]
1408    pub transform_shift_z: ::std::option::Option<f64>,
1409    #[serde(
1410        rename = "transformXYRotation",
1411        default,
1412        skip_serializing_if = "::std::option::Option::is_none"
1413    )]
1414    pub transform_xy_rotation: ::std::option::Option<f64>,
1415    #[serde(
1416        rename = "transformXYScaleFactor",
1417        default,
1418        skip_serializing_if = "::std::option::Option::is_none"
1419    )]
1420    pub transform_xy_scale_factor: ::std::option::Option<f64>,
1421}
1422impl ::std::convert::From<&AgsProjectCoordinateSystem> for AgsProjectCoordinateSystem {
1423    fn from(value: &AgsProjectCoordinateSystem) -> Self {
1424        value.clone()
1425    }
1426}
1427impl AgsProjectCoordinateSystem {
1428    pub fn builder() -> builder::AgsProjectCoordinateSystem {
1429        Default::default()
1430    }
1431}
1432#[doc = "Units for X and Y axis (or X axis only if no Y axis). Units are considered to be case sensitive."]
1433#[doc = r""]
1434#[doc = r" <details><summary>JSON schema</summary>"]
1435#[doc = r""]
1436#[doc = r" ```json"]
1437#[doc = "{"]
1438#[doc = "  \"description\": \"Units for X and Y axis (or X axis only if no Y axis). Units are considered to be case sensitive.\","]
1439#[doc = "  \"type\": \"string\","]
1440#[doc = "  \"minLength\": 1,"]
1441#[doc = "  \"example\": \"m\""]
1442#[doc = "}"]
1443#[doc = r" ```"]
1444#[doc = r" </details>"]
1445#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1446#[serde(transparent)]
1447pub struct AgsProjectCoordinateSystemAxisUnitsXy(::std::string::String);
1448impl ::std::ops::Deref for AgsProjectCoordinateSystemAxisUnitsXy {
1449    type Target = ::std::string::String;
1450    fn deref(&self) -> &::std::string::String {
1451        &self.0
1452    }
1453}
1454impl ::std::convert::From<AgsProjectCoordinateSystemAxisUnitsXy> for ::std::string::String {
1455    fn from(value: AgsProjectCoordinateSystemAxisUnitsXy) -> Self {
1456        value.0
1457    }
1458}
1459impl ::std::convert::From<&AgsProjectCoordinateSystemAxisUnitsXy>
1460    for AgsProjectCoordinateSystemAxisUnitsXy
1461{
1462    fn from(value: &AgsProjectCoordinateSystemAxisUnitsXy) -> Self {
1463        value.clone()
1464    }
1465}
1466impl ::std::str::FromStr for AgsProjectCoordinateSystemAxisUnitsXy {
1467    type Err = self::error::ConversionError;
1468    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1469        if value.chars().count() < 1usize {
1470            return Err("shorter than 1 characters".into());
1471        }
1472        Ok(Self(value.to_string()))
1473    }
1474}
1475impl ::std::convert::TryFrom<&str> for AgsProjectCoordinateSystemAxisUnitsXy {
1476    type Error = self::error::ConversionError;
1477    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1478        value.parse()
1479    }
1480}
1481impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCoordinateSystemAxisUnitsXy {
1482    type Error = self::error::ConversionError;
1483    fn try_from(
1484        value: &::std::string::String,
1485    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1486        value.parse()
1487    }
1488}
1489impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCoordinateSystemAxisUnitsXy {
1490    type Error = self::error::ConversionError;
1491    fn try_from(
1492        value: ::std::string::String,
1493    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1494        value.parse()
1495    }
1496}
1497impl<'de> ::serde::Deserialize<'de> for AgsProjectCoordinateSystemAxisUnitsXy {
1498    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
1499    where
1500        D: ::serde::Deserializer<'de>,
1501    {
1502        ::std::string::String::deserialize(deserializer)?
1503            .parse()
1504            .map_err(|e: self::error::ConversionError| {
1505                <D::Error as ::serde::de::Error>::custom(e.to_string())
1506            })
1507    }
1508}
1509#[doc = "Units for Z axis (elevation). May include optional prefix and/or suffix as commonly used to identify the datum used. Considered to be case sensitive."]
1510#[doc = r""]
1511#[doc = r" <details><summary>JSON schema</summary>"]
1512#[doc = r""]
1513#[doc = r" ```json"]
1514#[doc = "{"]
1515#[doc = "  \"description\": \"Units for Z axis (elevation). May include optional prefix and/or suffix as commonly used to identify the datum used. Considered to be case sensitive.\","]
1516#[doc = "  \"type\": \"string\","]
1517#[doc = "  \"minLength\": 1,"]
1518#[doc = "  \"example\": \"mOD\""]
1519#[doc = "}"]
1520#[doc = r" ```"]
1521#[doc = r" </details>"]
1522#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1523#[serde(transparent)]
1524pub struct AgsProjectCoordinateSystemAxisUnitsZ(::std::string::String);
1525impl ::std::ops::Deref for AgsProjectCoordinateSystemAxisUnitsZ {
1526    type Target = ::std::string::String;
1527    fn deref(&self) -> &::std::string::String {
1528        &self.0
1529    }
1530}
1531impl ::std::convert::From<AgsProjectCoordinateSystemAxisUnitsZ> for ::std::string::String {
1532    fn from(value: AgsProjectCoordinateSystemAxisUnitsZ) -> Self {
1533        value.0
1534    }
1535}
1536impl ::std::convert::From<&AgsProjectCoordinateSystemAxisUnitsZ>
1537    for AgsProjectCoordinateSystemAxisUnitsZ
1538{
1539    fn from(value: &AgsProjectCoordinateSystemAxisUnitsZ) -> Self {
1540        value.clone()
1541    }
1542}
1543impl ::std::str::FromStr for AgsProjectCoordinateSystemAxisUnitsZ {
1544    type Err = self::error::ConversionError;
1545    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1546        if value.chars().count() < 1usize {
1547            return Err("shorter than 1 characters".into());
1548        }
1549        Ok(Self(value.to_string()))
1550    }
1551}
1552impl ::std::convert::TryFrom<&str> for AgsProjectCoordinateSystemAxisUnitsZ {
1553    type Error = self::error::ConversionError;
1554    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1555        value.parse()
1556    }
1557}
1558impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCoordinateSystemAxisUnitsZ {
1559    type Error = self::error::ConversionError;
1560    fn try_from(
1561        value: &::std::string::String,
1562    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1563        value.parse()
1564    }
1565}
1566impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCoordinateSystemAxisUnitsZ {
1567    type Error = self::error::ConversionError;
1568    fn try_from(
1569        value: ::std::string::String,
1570    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1571        value.parse()
1572    }
1573}
1574impl<'de> ::serde::Deserialize<'de> for AgsProjectCoordinateSystemAxisUnitsZ {
1575    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
1576    where
1577        D: ::serde::Deserializer<'de>,
1578    {
1579        ::std::string::String::deserialize(deserializer)?
1580            .parse()
1581            .map_err(|e: self::error::ConversionError| {
1582                <D::Error as ::serde::de::Error>::custom(e.to_string())
1583            })
1584    }
1585}
1586#[doc = "Type of system. Only cartesian systems fully supported at present: XYZ (3D), XZ (2D vertical section), XY (2D map), Z (elevation only, i.e. simple layer profiles). For other types of system input other and describe in description."]
1587#[doc = r""]
1588#[doc = r" <details><summary>JSON schema</summary>"]
1589#[doc = r""]
1590#[doc = r" ```json"]
1591#[doc = "{"]
1592#[doc = "  \"description\": \"Type of system. Only cartesian systems fully supported at present: XYZ (3D), XZ (2D vertical section), XY (2D map), Z (elevation only, i.e. simple layer profiles). For other types of system input other and describe in description.\","]
1593#[doc = "  \"type\": \"string\","]
1594#[doc = "  \"enum\": ["]
1595#[doc = "    \"XYZ\","]
1596#[doc = "    \"XZ\","]
1597#[doc = "    \"XY\","]
1598#[doc = "    \"Z\","]
1599#[doc = "    \"other\""]
1600#[doc = "  ],"]
1601#[doc = "  \"example\": \"XYZ\""]
1602#[doc = "}"]
1603#[doc = r" ```"]
1604#[doc = r" </details>"]
1605#[derive(
1606    :: serde :: Deserialize,
1607    :: serde :: Serialize,
1608    Clone,
1609    Copy,
1610    Debug,
1611    Eq,
1612    Hash,
1613    Ord,
1614    PartialEq,
1615    PartialOrd,
1616)]
1617pub enum AgsProjectCoordinateSystemSystemType {
1618    #[serde(rename = "XYZ")]
1619    Xyz,
1620    #[serde(rename = "XZ")]
1621    Xz,
1622    #[serde(rename = "XY")]
1623    Xy,
1624    Z,
1625    #[serde(rename = "other")]
1626    Other,
1627}
1628impl ::std::convert::From<&Self> for AgsProjectCoordinateSystemSystemType {
1629    fn from(value: &AgsProjectCoordinateSystemSystemType) -> Self {
1630        value.clone()
1631    }
1632}
1633impl ::std::fmt::Display for AgsProjectCoordinateSystemSystemType {
1634    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1635        match *self {
1636            Self::Xyz => write!(f, "XYZ"),
1637            Self::Xz => write!(f, "XZ"),
1638            Self::Xy => write!(f, "XY"),
1639            Self::Z => write!(f, "Z"),
1640            Self::Other => write!(f, "other"),
1641        }
1642    }
1643}
1644impl ::std::str::FromStr for AgsProjectCoordinateSystemSystemType {
1645    type Err = self::error::ConversionError;
1646    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1647        match value {
1648            "XYZ" => Ok(Self::Xyz),
1649            "XZ" => Ok(Self::Xz),
1650            "XY" => Ok(Self::Xy),
1651            "Z" => Ok(Self::Z),
1652            "other" => Ok(Self::Other),
1653            _ => Err("invalid value".into()),
1654        }
1655    }
1656}
1657impl ::std::convert::TryFrom<&str> for AgsProjectCoordinateSystemSystemType {
1658    type Error = self::error::ConversionError;
1659    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1660        value.parse()
1661    }
1662}
1663impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectCoordinateSystemSystemType {
1664    type Error = self::error::ConversionError;
1665    fn try_from(
1666        value: &::std::string::String,
1667    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1668        value.parse()
1669    }
1670}
1671impl ::std::convert::TryFrom<::std::string::String> for AgsProjectCoordinateSystemSystemType {
1672    type Error = self::error::ConversionError;
1673    fn try_from(
1674        value: ::std::string::String,
1675    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1676        value.parse()
1677    }
1678}
1679#[doc = "Metadata for the individual documents or references contained within a document set. Refer to 3.2.3. Documents for further details."]
1680#[doc = r""]
1681#[doc = r" <details><summary>JSON schema</summary>"]
1682#[doc = r""]
1683#[doc = r" ```json"]
1684#[doc = "{"]
1685#[doc = "  \"description\": \"Metadata for the individual documents or references contained within a document set. Refer to 3.2.3. Documents for further details.\","]
1686#[doc = "  \"type\": \"object\","]
1687#[doc = "  \"properties\": {"]
1688#[doc = "    \"author\": {"]
1689#[doc = "      \"description\": \"The original author of the document.\","]
1690#[doc = "      \"type\": \"string\","]
1691#[doc = "      \"example\": \"Boring Drilling Ltd\""]
1692#[doc = "    },"]
1693#[doc = "    \"client\": {"]
1694#[doc = "      \"description\": \"The original commissioning client for the document.\","]
1695#[doc = "      \"type\": \"string\","]
1696#[doc = "      \"example\": \"XYZ D&B Contractor\""]
1697#[doc = "    },"]
1698#[doc = "    \"date\": {"]
1699#[doc = "      \"description\": \"Date of the document (current revision).\","]
1700#[doc = "      \"type\": \"string\","]
1701#[doc = "      \"format\": \"date\","]
1702#[doc = "      \"example\": \"2018-09-06\""]
1703#[doc = "    },"]
1704#[doc = "    \"description\": {"]
1705#[doc = "      \"description\": \"Further description if required. Typically what the document is commonly known as, given that the formal title may be verbose. Alternatively use for name/title given in project documentation system if this differs from original title.\","]
1706#[doc = "      \"type\": \"string\","]
1707#[doc = "      \"example\": \"Package A factual report, Volume 1\""]
1708#[doc = "    },"]
1709#[doc = "    \"documentID\": {"]
1710#[doc = "      \"description\": \"Identifier for the document. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. If used, identifiers for documentID should be unique at least within each document set (agsProjectDocumentSet object), and preferably unique within the AGSi file. \","]
1711#[doc = "      \"type\": \"string\","]
1712#[doc = "      \"example\": \"eac20ae4-25a1-4e68-96f8-cf43b9761b11\""]
1713#[doc = "    },"]
1714#[doc = "    \"documentSystemURI\": {"]
1715#[doc = "      \"description\": \"URI (link address) for the location of the document within the project document management system. To be used if documentURI attribute used for relative link. Spaces are not permitted in URI strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names.\","]
1716#[doc = "      \"type\": \"string\","]
1717#[doc = "      \"format\": \"uri\","]
1718#[doc = "      \"example\": \"https://gothammetro.sharepoint.com/C999/docs/C999-BDL-AX-XX-RP-WG-0002\""]
1719#[doc = "    },"]
1720#[doc = "    \"documentURI\": {"]
1721#[doc = "      \"description\": \"URI-reference (link address) for the document. This will be a relative link if document included within the AGSi package. For a public domain published reference, the link should be provided here. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names.\","]
1722#[doc = "      \"type\": \"string\","]
1723#[doc = "      \"format\": \"uri-reference\","]
1724#[doc = "      \"example\": \"docs/GI/C999-BDL-AX-XX-RP-WG-0002.pdf\""]
1725#[doc = "    },"]
1726#[doc = "    \"originalReference\": {"]
1727#[doc = "      \"description\": \"Original reference shown on the document, if different from reference used by project document system (see systemReference).\","]
1728#[doc = "      \"type\": \"string\","]
1729#[doc = "      \"example\": \"12345/GI/2\""]
1730#[doc = "    },"]
1731#[doc = "    \"remarks\": {"]
1732#[doc = "      \"description\": \"Additional remarks, if required.\","]
1733#[doc = "      \"type\": \"string\","]
1734#[doc = "      \"example\": \"Some additional remarks\""]
1735#[doc = "    },"]
1736#[doc = "    \"revision\": {"]
1737#[doc = "      \"description\": \"Revision reference (typically in accordance with ISO19650 or BS1192).\","]
1738#[doc = "      \"type\": \"string\","]
1739#[doc = "      \"example\": \"P2\""]
1740#[doc = "    },"]
1741#[doc = "    \"status\": {"]
1742#[doc = "      \"description\": \"Status as indicated on or within the document, typically following recommendations of BS8574 if applicable.\","]
1743#[doc = "      \"type\": \"string\","]
1744#[doc = "      \"example\": \"Final\""]
1745#[doc = "    },"]
1746#[doc = "    \"statusCode\": {"]
1747#[doc = "      \"description\": \"Status code, typically in accordance with ISO19650, or BS1192 suitability code.\","]
1748#[doc = "      \"type\": \"string\","]
1749#[doc = "      \"example\": \"S2\""]
1750#[doc = "    },"]
1751#[doc = "    \"systemReference\": {"]
1752#[doc = "      \"description\": \"Document reference used in the project document management system. May differ from original reference shown on document.\","]
1753#[doc = "      \"type\": \"string\","]
1754#[doc = "      \"example\": \"C999-BDL-AX-XX-RP-WG-0002\""]
1755#[doc = "    },"]
1756#[doc = "    \"title\": {"]
1757#[doc = "      \"description\": \"Original title on the document.\","]
1758#[doc = "      \"type\": \"string\","]
1759#[doc = "      \"example\": \"Factual ground investigation report, Gotham City Metro Purple Line, C999 Package A, Volume 1 of 3\""]
1760#[doc = "    }"]
1761#[doc = "  },"]
1762#[doc = "  \"additionalProperties\": false"]
1763#[doc = "}"]
1764#[doc = r" ```"]
1765#[doc = r" </details>"]
1766#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
1767#[serde(deny_unknown_fields)]
1768pub struct AgsProjectDocument {
1769    #[doc = "The original author of the document."]
1770    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1771    pub author: ::std::option::Option<::std::string::String>,
1772    #[doc = "The original commissioning client for the document."]
1773    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1774    pub client: ::std::option::Option<::std::string::String>,
1775    #[doc = "Date of the document (current revision)."]
1776    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1777    pub date: ::std::option::Option<::chrono::naive::NaiveDate>,
1778    #[doc = "Further description if required. Typically what the document is commonly known as, given that the formal title may be verbose. Alternatively use for name/title given in project documentation system if this differs from original title."]
1779    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1780    pub description: ::std::option::Option<::std::string::String>,
1781    #[doc = "Identifier for the document. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. If used, identifiers for documentID should be unique at least within each document set (agsProjectDocumentSet object), and preferably unique within the AGSi file. "]
1782    #[serde(
1783        rename = "documentID",
1784        default,
1785        skip_serializing_if = "::std::option::Option::is_none"
1786    )]
1787    pub document_id: ::std::option::Option<::std::string::String>,
1788    #[doc = "URI (link address) for the location of the document within the project document management system. To be used if documentURI attribute used for relative link. Spaces are not permitted in URI strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names."]
1789    #[serde(
1790        rename = "documentSystemURI",
1791        default,
1792        skip_serializing_if = "::std::option::Option::is_none"
1793    )]
1794    pub document_system_uri: ::std::option::Option<::std::string::String>,
1795    #[doc = "URI-reference (link address) for the document. This will be a relative link if document included within the AGSi package. For a public domain published reference, the link should be provided here. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names."]
1796    #[serde(
1797        rename = "documentURI",
1798        default,
1799        skip_serializing_if = "::std::option::Option::is_none"
1800    )]
1801    pub document_uri: ::std::option::Option<::std::string::String>,
1802    #[doc = "Original reference shown on the document, if different from reference used by project document system (see systemReference)."]
1803    #[serde(
1804        rename = "originalReference",
1805        default,
1806        skip_serializing_if = "::std::option::Option::is_none"
1807    )]
1808    pub original_reference: ::std::option::Option<::std::string::String>,
1809    #[doc = "Additional remarks, if required."]
1810    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1811    pub remarks: ::std::option::Option<::std::string::String>,
1812    #[doc = "Revision reference (typically in accordance with ISO19650 or BS1192)."]
1813    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1814    pub revision: ::std::option::Option<::std::string::String>,
1815    #[doc = "Status as indicated on or within the document, typically following recommendations of BS8574 if applicable."]
1816    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1817    pub status: ::std::option::Option<::std::string::String>,
1818    #[doc = "Status code, typically in accordance with ISO19650, or BS1192 suitability code."]
1819    #[serde(
1820        rename = "statusCode",
1821        default,
1822        skip_serializing_if = "::std::option::Option::is_none"
1823    )]
1824    pub status_code: ::std::option::Option<::std::string::String>,
1825    #[doc = "Document reference used in the project document management system. May differ from original reference shown on document."]
1826    #[serde(
1827        rename = "systemReference",
1828        default,
1829        skip_serializing_if = "::std::option::Option::is_none"
1830    )]
1831    pub system_reference: ::std::option::Option<::std::string::String>,
1832    #[doc = "Original title on the document."]
1833    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1834    pub title: ::std::option::Option<::std::string::String>,
1835}
1836impl ::std::convert::From<&AgsProjectDocument> for AgsProjectDocument {
1837    fn from(value: &AgsProjectDocument) -> Self {
1838        value.clone()
1839    }
1840}
1841impl ::std::default::Default for AgsProjectDocument {
1842    fn default() -> Self {
1843        Self {
1844            author: Default::default(),
1845            client: Default::default(),
1846            date: Default::default(),
1847            description: Default::default(),
1848            document_id: Default::default(),
1849            document_system_uri: Default::default(),
1850            document_uri: Default::default(),
1851            original_reference: Default::default(),
1852            remarks: Default::default(),
1853            revision: Default::default(),
1854            status: Default::default(),
1855            status_code: Default::default(),
1856            system_reference: Default::default(),
1857            title: Default::default(),
1858        }
1859    }
1860}
1861impl AgsProjectDocument {
1862    pub fn builder() -> builder::AgsProjectDocument {
1863        Default::default()
1864    }
1865}
1866#[doc = "Container and metadata for a set of supporting documents or reference information, which may be referenced from other parts of the schema. This container must be used and referenced, even if there is only one document within it. Refer to 3.2.3. Documents for further details."]
1867#[doc = r""]
1868#[doc = r" <details><summary>JSON schema</summary>"]
1869#[doc = r""]
1870#[doc = r" ```json"]
1871#[doc = "{"]
1872#[doc = "  \"description\": \"Container and metadata for a set of supporting documents or reference information, which may be referenced from other parts of the schema. This container must be used and referenced, even if there is only one document within it. Refer to 3.2.3. Documents for further details.\","]
1873#[doc = "  \"type\": \"object\","]
1874#[doc = "  \"required\": ["]
1875#[doc = "    \"documentSetID\""]
1876#[doc = "  ],"]
1877#[doc = "  \"properties\": {"]
1878#[doc = "    \"agsProjectDocument\": {"]
1879#[doc = "      \"description\": \"Array of embedded agsProjectDocument object(s).\","]
1880#[doc = "      \"type\": \"array\","]
1881#[doc = "      \"items\": {"]
1882#[doc = "        \"$ref\": \"#/$defs/agsProjectDocument\""]
1883#[doc = "      }"]
1884#[doc = "    },"]
1885#[doc = "    \"description\": {"]
1886#[doc = "      \"description\": \"Brief description, i.e. what this set of documents is commonly known as.\","]
1887#[doc = "      \"type\": \"string\","]
1888#[doc = "      \"example\": \"Package A factual report\""]
1889#[doc = "    },"]
1890#[doc = "    \"documentSetID\": {"]
1891#[doc = "      \"description\": \"Identifier for this document set. May be local to this file or a UUID as required/specified.  Identifiers for documentSetID shall be unique within an AGSi file. Referenced by other parts of the schema.\","]
1892#[doc = "      \"type\": \"string\","]
1893#[doc = "      \"minLength\": 1,"]
1894#[doc = "      \"example\": \"ExampleDocSetID\""]
1895#[doc = "    },"]
1896#[doc = "    \"remarks\": {"]
1897#[doc = "      \"description\": \"Additional remarks, if required\","]
1898#[doc = "      \"type\": \"string\","]
1899#[doc = "      \"example\": \"Some additional remarks\""]
1900#[doc = "    }"]
1901#[doc = "  },"]
1902#[doc = "  \"additionalProperties\": false"]
1903#[doc = "}"]
1904#[doc = r" ```"]
1905#[doc = r" </details>"]
1906#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
1907#[serde(deny_unknown_fields)]
1908pub struct AgsProjectDocumentSet {
1909    #[doc = "Array of embedded agsProjectDocument object(s)."]
1910    #[serde(
1911        rename = "agsProjectDocument",
1912        default,
1913        skip_serializing_if = "::std::vec::Vec::is_empty"
1914    )]
1915    pub ags_project_document: ::std::vec::Vec<AgsProjectDocument>,
1916    #[doc = "Brief description, i.e. what this set of documents is commonly known as."]
1917    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1918    pub description: ::std::option::Option<::std::string::String>,
1919    #[doc = "Identifier for this document set. May be local to this file or a UUID as required/specified.  Identifiers for documentSetID shall be unique within an AGSi file. Referenced by other parts of the schema."]
1920    #[serde(rename = "documentSetID")]
1921    pub document_set_id: AgsProjectDocumentSetDocumentSetId,
1922    #[doc = "Additional remarks, if required"]
1923    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
1924    pub remarks: ::std::option::Option<::std::string::String>,
1925}
1926impl ::std::convert::From<&AgsProjectDocumentSet> for AgsProjectDocumentSet {
1927    fn from(value: &AgsProjectDocumentSet) -> Self {
1928        value.clone()
1929    }
1930}
1931impl AgsProjectDocumentSet {
1932    pub fn builder() -> builder::AgsProjectDocumentSet {
1933        Default::default()
1934    }
1935}
1936#[doc = "Identifier for this document set. May be local to this file or a UUID as required/specified.  Identifiers for documentSetID shall be unique within an AGSi file. Referenced by other parts of the schema."]
1937#[doc = r""]
1938#[doc = r" <details><summary>JSON schema</summary>"]
1939#[doc = r""]
1940#[doc = r" ```json"]
1941#[doc = "{"]
1942#[doc = "  \"description\": \"Identifier for this document set. May be local to this file or a UUID as required/specified.  Identifiers for documentSetID shall be unique within an AGSi file. Referenced by other parts of the schema.\","]
1943#[doc = "  \"type\": \"string\","]
1944#[doc = "  \"minLength\": 1,"]
1945#[doc = "  \"example\": \"ExampleDocSetID\""]
1946#[doc = "}"]
1947#[doc = r" ```"]
1948#[doc = r" </details>"]
1949#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1950#[serde(transparent)]
1951pub struct AgsProjectDocumentSetDocumentSetId(::std::string::String);
1952impl ::std::ops::Deref for AgsProjectDocumentSetDocumentSetId {
1953    type Target = ::std::string::String;
1954    fn deref(&self) -> &::std::string::String {
1955        &self.0
1956    }
1957}
1958impl ::std::convert::From<AgsProjectDocumentSetDocumentSetId> for ::std::string::String {
1959    fn from(value: AgsProjectDocumentSetDocumentSetId) -> Self {
1960        value.0
1961    }
1962}
1963impl ::std::convert::From<&AgsProjectDocumentSetDocumentSetId>
1964    for AgsProjectDocumentSetDocumentSetId
1965{
1966    fn from(value: &AgsProjectDocumentSetDocumentSetId) -> Self {
1967        value.clone()
1968    }
1969}
1970impl ::std::str::FromStr for AgsProjectDocumentSetDocumentSetId {
1971    type Err = self::error::ConversionError;
1972    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1973        if value.chars().count() < 1usize {
1974            return Err("shorter than 1 characters".into());
1975        }
1976        Ok(Self(value.to_string()))
1977    }
1978}
1979impl ::std::convert::TryFrom<&str> for AgsProjectDocumentSetDocumentSetId {
1980    type Error = self::error::ConversionError;
1981    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
1982        value.parse()
1983    }
1984}
1985impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectDocumentSetDocumentSetId {
1986    type Error = self::error::ConversionError;
1987    fn try_from(
1988        value: &::std::string::String,
1989    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1990        value.parse()
1991    }
1992}
1993impl ::std::convert::TryFrom<::std::string::String> for AgsProjectDocumentSetDocumentSetId {
1994    type Error = self::error::ConversionError;
1995    fn try_from(
1996        value: ::std::string::String,
1997    ) -> ::std::result::Result<Self, self::error::ConversionError> {
1998        value.parse()
1999    }
2000}
2001impl<'de> ::serde::Deserialize<'de> for AgsProjectDocumentSetDocumentSetId {
2002    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2003    where
2004        D: ::serde::Deserializer<'de>,
2005    {
2006        ::std::string::String::deserialize(deserializer)?
2007            .parse()
2008            .map_err(|e: self::error::ConversionError| {
2009                <D::Error as ::serde::de::Error>::custom(e.to_string())
2010            })
2011    }
2012}
2013#[doc = "Basic metadata for investigations, generally ground investigations. Referenced from various parts of the schema. More detailed metadata may be provided using embedded agsiDataPropertyValue or agsiDataPropertyFromFile objects. Refer to 3.2.1. Projects and investigations for further details."]
2014#[doc = r""]
2015#[doc = r" <details><summary>JSON schema</summary>"]
2016#[doc = r""]
2017#[doc = r" ```json"]
2018#[doc = "{"]
2019#[doc = "  \"description\": \"Basic metadata for investigations, generally ground investigations. Referenced from various parts of the schema. More detailed metadata may be provided using embedded agsiDataPropertyValue or agsiDataPropertyFromFile objects. Refer to 3.2.1. Projects and investigations for further details.\","]
2020#[doc = "  \"type\": \"object\","]
2021#[doc = "  \"required\": ["]
2022#[doc = "    \"investigationID\","]
2023#[doc = "    \"investigationName\""]
2024#[doc = "  ],"]
2025#[doc = "  \"properties\": {"]
2026#[doc = "    \"agsiDataPropertyFromFile\": {"]
2027#[doc = "      \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file.\","]
2028#[doc = "      \"type\": \"array\","]
2029#[doc = "      \"items\": {"]
2030#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
2031#[doc = "      }"]
2032#[doc = "    },"]
2033#[doc = "    \"agsiDataPropertyValue\": {"]
2034#[doc = "      \"description\": \"Array of embedded agsiDataPropertyValue objects. Used to provide further metadata relating to the investigation, if required.\","]
2035#[doc = "      \"type\": \"array\","]
2036#[doc = "      \"items\": {"]
2037#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
2038#[doc = "      }"]
2039#[doc = "    },"]
2040#[doc = "    \"client\": {"]
2041#[doc = "      \"description\": \"Commissioning (contracting) client for the investigation.\","]
2042#[doc = "      \"type\": \"string\","]
2043#[doc = "      \"example\": \"XYZ D&B Contractor\""]
2044#[doc = "    },"]
2045#[doc = "    \"contractor\": {"]
2046#[doc = "      \"description\": \"Contractor undertaking the investigation.\","]
2047#[doc = "      \"type\": \"string\","]
2048#[doc = "      \"example\": \"Boring Drilling Ltd\""]
2049#[doc = "    },"]
2050#[doc = "    \"dataDocumentSetID\": {"]
2051#[doc = "      \"description\": \"Reference to the data for the GI, typically the AGS (factual) data, details of which should be provided in an agsProjectDocumentSet object.\","]
2052#[doc = "      \"type\": \"string\","]
2053#[doc = "      \"example\": \"ExampleDocSetID\""]
2054#[doc = "    },"]
2055#[doc = "    \"description\": {"]
2056#[doc = "      \"description\": \"Further description of investigation, if required.\","]
2057#[doc = "      \"type\": \"string\","]
2058#[doc = "      \"example\": \"Preliminary sitewide investigation, March-July 2018\""]
2059#[doc = "    },"]
2060#[doc = "    \"engineer\": {"]
2061#[doc = "      \"description\": \"Organisation acting as Engineer, Investigation Supervisor, Contract Administrator or equivalent. If technical and contractual roles are split, then include both.\","]
2062#[doc = "      \"type\": \"string\","]
2063#[doc = "      \"example\": \"ABC Consultants\""]
2064#[doc = "    },"]
2065#[doc = "    \"fieldworkDateStart\": {"]
2066#[doc = "      \"description\": \"Date of start of fieldwork. Date in ISO 8601 format so it could be to nearest month (2019-05) or just the year if exact date not available.\","]
2067#[doc = "      \"type\": \"string\","]
2068#[doc = "      \"format\": \"date\","]
2069#[doc = "      \"example\": \"2018-08-21\""]
2070#[doc = "    },"]
2071#[doc = "    \"investigationID\": {"]
2072#[doc = "      \"description\": \"Identifier for this investigation. May be local to this file or a UUID as required/specified. Identifiers for investigationID shall be unique within an AGSi file. Referenced by other parts of the schema such as agsiObservationSet.\","]
2073#[doc = "      \"type\": \"string\","]
2074#[doc = "      \"minLength\": 1,"]
2075#[doc = "      \"example\": \"GIPackageA\""]
2076#[doc = "    },"]
2077#[doc = "    \"investigationName\": {"]
2078#[doc = "      \"description\": \"Name of investigation.\","]
2079#[doc = "      \"type\": \"string\","]
2080#[doc = "      \"minLength\": 1,"]
2081#[doc = "      \"example\": \"Gotham City Metro Purple Line, C999 Package A\""]
2082#[doc = "    },"]
2083#[doc = "    \"locationCoordinateGlobal\": {"]
2084#[doc = "      \"description\": \"Coordinates, in global coordinate system (national or regional system, as defined in agsProjectCoordinateSystem) of a point that represents the general location of the investigation, typically the middle of the site.\","]
2085#[doc = "      \"type\": \"array\","]
2086#[doc = "      \"$ref\": \"#/$defs/coordinateTuple\","]
2087#[doc = "      \"example\": ["]
2088#[doc = "        475270.0,"]
2089#[doc = "        137965.0"]
2090#[doc = "      ]"]
2091#[doc = "    },"]
2092#[doc = "    \"locationCoordinateProject\": {"]
2093#[doc = "      \"description\": \"Coordinates, in a relevant model coordinate system (if applicable), of a point that represents the general location of the investigation, typically the middle of the site. Relevant system will be usually be a 3D system that is used for all 3D models, or a 2D map system. Do not use this attribute if multiple different 3D model systems are in use.\","]
2094#[doc = "      \"type\": \"array\","]
2095#[doc = "      \"$ref\": \"#/$defs/coordinateTuple\","]
2096#[doc = "      \"example\": ["]
2097#[doc = "        25500.0,"]
2098#[doc = "        13200.0"]
2099#[doc = "      ]"]
2100#[doc = "    },"]
2101#[doc = "    \"locationDescription\": {"]
2102#[doc = "      \"description\": \"Brief description that locates the site. Could be a postal address.\","]
2103#[doc = "      \"type\": \"string\","]
2104#[doc = "      \"example\": \"Gotham City, west, central and southeast\""]
2105#[doc = "    },"]
2106#[doc = "    \"parentProjectName\": {"]
2107#[doc = "      \"description\": \"Name of the parent project that this investigation is for. If parent is ultimate parent project, then may be left blank.\","]
2108#[doc = "      \"type\": \"string\","]
2109#[doc = "      \"example\": \"C999 Area A Phase 1 Design and Build\""]
2110#[doc = "    },"]
2111#[doc = "    \"remarks\": {"]
2112#[doc = "      \"description\": \"Additional remarks, if required.\","]
2113#[doc = "      \"type\": \"string\","]
2114#[doc = "      \"example\": \"Some additional remarks\""]
2115#[doc = "    },"]
2116#[doc = "    \"reportDocumentSetID\": {"]
2117#[doc = "      \"description\": \"Reference to the reports relating to the investigation, details of which should be provided in an agsProjectDocumentSet object.\","]
2118#[doc = "      \"type\": \"string\","]
2119#[doc = "      \"example\": \"ExampleDocSetID\""]
2120#[doc = "    },"]
2121#[doc = "    \"scopeDescription\": {"]
2122#[doc = "      \"description\": \"Brief description of scope.\","]
2123#[doc = "      \"type\": \"string\","]
2124#[doc = "      \"example\": \"Preliminary investigation comprising 27 boreholes of which 15 extended by rotary coring up to 55m depth, 45 CPT (max 15m), 35 trial pits, 26 dynamic sampling holes, geotechnical and contamination sampling and testing, piezometric monitoring, limited gas monitoring.\""]
2125#[doc = "    },"]
2126#[doc = "    \"specificationDocumentSetID\": {"]
2127#[doc = "      \"description\": \"Reference to the specification for the GI, details of which should be provided in an agsProjectDocumentSet object.\","]
2128#[doc = "      \"type\": \"string\","]
2129#[doc = "      \"example\": \"ExampleDocSetID\""]
2130#[doc = "    },"]
2131#[doc = "    \"subcontractors\": {"]
2132#[doc = "      \"description\": \"List of significant subcontractors or suppliers working on the investigation. List as a text string, not an array.\","]
2133#[doc = "      \"type\": \"string\","]
2134#[doc = "      \"example\": \"Acme Specialist Lab, XYZ Environmental Lab\""]
2135#[doc = "    },"]
2136#[doc = "    \"ultimateProjectClient\": {"]
2137#[doc = "      \"description\": \"Client for the ultimate parent project.\","]
2138#[doc = "      \"type\": \"string\","]
2139#[doc = "      \"example\": \"City Transport Authority\""]
2140#[doc = "    },"]
2141#[doc = "    \"ultimateProjectName\": {"]
2142#[doc = "      \"description\": \"Name of the ultimate parent project that this investigation is for.\","]
2143#[doc = "      \"type\": \"string\","]
2144#[doc = "      \"example\": \"Gotham City Metro Purple Line\""]
2145#[doc = "    }"]
2146#[doc = "  },"]
2147#[doc = "  \"additionalProperties\": false"]
2148#[doc = "}"]
2149#[doc = r" ```"]
2150#[doc = r" </details>"]
2151#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
2152#[serde(deny_unknown_fields)]
2153pub struct AgsProjectInvestigation {
2154    #[doc = "An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file."]
2155    #[serde(
2156        rename = "agsiDataPropertyFromFile",
2157        default,
2158        skip_serializing_if = "::std::vec::Vec::is_empty"
2159    )]
2160    pub agsi_data_property_from_file: ::std::vec::Vec<AgsiDataPropertyFromFile>,
2161    #[doc = "Array of embedded agsiDataPropertyValue objects. Used to provide further metadata relating to the investigation, if required."]
2162    #[serde(
2163        rename = "agsiDataPropertyValue",
2164        default,
2165        skip_serializing_if = "::std::vec::Vec::is_empty"
2166    )]
2167    pub agsi_data_property_value: ::std::vec::Vec<AgsiDataPropertyValue>,
2168    #[doc = "Commissioning (contracting) client for the investigation."]
2169    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2170    pub client: ::std::option::Option<::std::string::String>,
2171    #[doc = "Contractor undertaking the investigation."]
2172    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2173    pub contractor: ::std::option::Option<::std::string::String>,
2174    #[doc = "Reference to the data for the GI, typically the AGS (factual) data, details of which should be provided in an agsProjectDocumentSet object."]
2175    #[serde(
2176        rename = "dataDocumentSetID",
2177        default,
2178        skip_serializing_if = "::std::option::Option::is_none"
2179    )]
2180    pub data_document_set_id: ::std::option::Option<::std::string::String>,
2181    #[doc = "Further description of investigation, if required."]
2182    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2183    pub description: ::std::option::Option<::std::string::String>,
2184    #[doc = "Organisation acting as Engineer, Investigation Supervisor, Contract Administrator or equivalent. If technical and contractual roles are split, then include both."]
2185    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2186    pub engineer: ::std::option::Option<::std::string::String>,
2187    #[doc = "Date of start of fieldwork. Date in ISO 8601 format so it could be to nearest month (2019-05) or just the year if exact date not available."]
2188    #[serde(
2189        rename = "fieldworkDateStart",
2190        default,
2191        skip_serializing_if = "::std::option::Option::is_none"
2192    )]
2193    pub fieldwork_date_start: ::std::option::Option<::chrono::naive::NaiveDate>,
2194    #[doc = "Identifier for this investigation. May be local to this file or a UUID as required/specified. Identifiers for investigationID shall be unique within an AGSi file. Referenced by other parts of the schema such as agsiObservationSet."]
2195    #[serde(rename = "investigationID")]
2196    pub investigation_id: AgsProjectInvestigationInvestigationId,
2197    #[doc = "Name of investigation."]
2198    #[serde(rename = "investigationName")]
2199    pub investigation_name: AgsProjectInvestigationInvestigationName,
2200    #[doc = "Coordinates, in global coordinate system (national or regional system, as defined in agsProjectCoordinateSystem) of a point that represents the general location of the investigation, typically the middle of the site."]
2201    #[serde(
2202        rename = "locationCoordinateGlobal",
2203        default,
2204        skip_serializing_if = "::std::option::Option::is_none"
2205    )]
2206    pub location_coordinate_global: ::std::option::Option<CoordinateTuple>,
2207    #[doc = "Coordinates, in a relevant model coordinate system (if applicable), of a point that represents the general location of the investigation, typically the middle of the site. Relevant system will be usually be a 3D system that is used for all 3D models, or a 2D map system. Do not use this attribute if multiple different 3D model systems are in use."]
2208    #[serde(
2209        rename = "locationCoordinateProject",
2210        default,
2211        skip_serializing_if = "::std::option::Option::is_none"
2212    )]
2213    pub location_coordinate_project: ::std::option::Option<CoordinateTuple>,
2214    #[doc = "Brief description that locates the site. Could be a postal address."]
2215    #[serde(
2216        rename = "locationDescription",
2217        default,
2218        skip_serializing_if = "::std::option::Option::is_none"
2219    )]
2220    pub location_description: ::std::option::Option<::std::string::String>,
2221    #[doc = "Name of the parent project that this investigation is for. If parent is ultimate parent project, then may be left blank."]
2222    #[serde(
2223        rename = "parentProjectName",
2224        default,
2225        skip_serializing_if = "::std::option::Option::is_none"
2226    )]
2227    pub parent_project_name: ::std::option::Option<::std::string::String>,
2228    #[doc = "Additional remarks, if required."]
2229    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2230    pub remarks: ::std::option::Option<::std::string::String>,
2231    #[doc = "Reference to the reports relating to the investigation, details of which should be provided in an agsProjectDocumentSet object."]
2232    #[serde(
2233        rename = "reportDocumentSetID",
2234        default,
2235        skip_serializing_if = "::std::option::Option::is_none"
2236    )]
2237    pub report_document_set_id: ::std::option::Option<::std::string::String>,
2238    #[doc = "Brief description of scope."]
2239    #[serde(
2240        rename = "scopeDescription",
2241        default,
2242        skip_serializing_if = "::std::option::Option::is_none"
2243    )]
2244    pub scope_description: ::std::option::Option<::std::string::String>,
2245    #[doc = "Reference to the specification for the GI, details of which should be provided in an agsProjectDocumentSet object."]
2246    #[serde(
2247        rename = "specificationDocumentSetID",
2248        default,
2249        skip_serializing_if = "::std::option::Option::is_none"
2250    )]
2251    pub specification_document_set_id: ::std::option::Option<::std::string::String>,
2252    #[doc = "List of significant subcontractors or suppliers working on the investigation. List as a text string, not an array."]
2253    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2254    pub subcontractors: ::std::option::Option<::std::string::String>,
2255    #[doc = "Client for the ultimate parent project."]
2256    #[serde(
2257        rename = "ultimateProjectClient",
2258        default,
2259        skip_serializing_if = "::std::option::Option::is_none"
2260    )]
2261    pub ultimate_project_client: ::std::option::Option<::std::string::String>,
2262    #[doc = "Name of the ultimate parent project that this investigation is for."]
2263    #[serde(
2264        rename = "ultimateProjectName",
2265        default,
2266        skip_serializing_if = "::std::option::Option::is_none"
2267    )]
2268    pub ultimate_project_name: ::std::option::Option<::std::string::String>,
2269}
2270impl ::std::convert::From<&AgsProjectInvestigation> for AgsProjectInvestigation {
2271    fn from(value: &AgsProjectInvestigation) -> Self {
2272        value.clone()
2273    }
2274}
2275impl AgsProjectInvestigation {
2276    pub fn builder() -> builder::AgsProjectInvestigation {
2277        Default::default()
2278    }
2279}
2280#[doc = "Identifier for this investigation. May be local to this file or a UUID as required/specified. Identifiers for investigationID shall be unique within an AGSi file. Referenced by other parts of the schema such as agsiObservationSet."]
2281#[doc = r""]
2282#[doc = r" <details><summary>JSON schema</summary>"]
2283#[doc = r""]
2284#[doc = r" ```json"]
2285#[doc = "{"]
2286#[doc = "  \"description\": \"Identifier for this investigation. May be local to this file or a UUID as required/specified. Identifiers for investigationID shall be unique within an AGSi file. Referenced by other parts of the schema such as agsiObservationSet.\","]
2287#[doc = "  \"type\": \"string\","]
2288#[doc = "  \"minLength\": 1,"]
2289#[doc = "  \"example\": \"GIPackageA\""]
2290#[doc = "}"]
2291#[doc = r" ```"]
2292#[doc = r" </details>"]
2293#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2294#[serde(transparent)]
2295pub struct AgsProjectInvestigationInvestigationId(::std::string::String);
2296impl ::std::ops::Deref for AgsProjectInvestigationInvestigationId {
2297    type Target = ::std::string::String;
2298    fn deref(&self) -> &::std::string::String {
2299        &self.0
2300    }
2301}
2302impl ::std::convert::From<AgsProjectInvestigationInvestigationId> for ::std::string::String {
2303    fn from(value: AgsProjectInvestigationInvestigationId) -> Self {
2304        value.0
2305    }
2306}
2307impl ::std::convert::From<&AgsProjectInvestigationInvestigationId>
2308    for AgsProjectInvestigationInvestigationId
2309{
2310    fn from(value: &AgsProjectInvestigationInvestigationId) -> Self {
2311        value.clone()
2312    }
2313}
2314impl ::std::str::FromStr for AgsProjectInvestigationInvestigationId {
2315    type Err = self::error::ConversionError;
2316    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2317        if value.chars().count() < 1usize {
2318            return Err("shorter than 1 characters".into());
2319        }
2320        Ok(Self(value.to_string()))
2321    }
2322}
2323impl ::std::convert::TryFrom<&str> for AgsProjectInvestigationInvestigationId {
2324    type Error = self::error::ConversionError;
2325    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2326        value.parse()
2327    }
2328}
2329impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectInvestigationInvestigationId {
2330    type Error = self::error::ConversionError;
2331    fn try_from(
2332        value: &::std::string::String,
2333    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2334        value.parse()
2335    }
2336}
2337impl ::std::convert::TryFrom<::std::string::String> for AgsProjectInvestigationInvestigationId {
2338    type Error = self::error::ConversionError;
2339    fn try_from(
2340        value: ::std::string::String,
2341    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2342        value.parse()
2343    }
2344}
2345impl<'de> ::serde::Deserialize<'de> for AgsProjectInvestigationInvestigationId {
2346    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2347    where
2348        D: ::serde::Deserializer<'de>,
2349    {
2350        ::std::string::String::deserialize(deserializer)?
2351            .parse()
2352            .map_err(|e: self::error::ConversionError| {
2353                <D::Error as ::serde::de::Error>::custom(e.to_string())
2354            })
2355    }
2356}
2357#[doc = "Name of investigation."]
2358#[doc = r""]
2359#[doc = r" <details><summary>JSON schema</summary>"]
2360#[doc = r""]
2361#[doc = r" ```json"]
2362#[doc = "{"]
2363#[doc = "  \"description\": \"Name of investigation.\","]
2364#[doc = "  \"type\": \"string\","]
2365#[doc = "  \"minLength\": 1,"]
2366#[doc = "  \"example\": \"Gotham City Metro Purple Line, C999 Package A\""]
2367#[doc = "}"]
2368#[doc = r" ```"]
2369#[doc = r" </details>"]
2370#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2371#[serde(transparent)]
2372pub struct AgsProjectInvestigationInvestigationName(::std::string::String);
2373impl ::std::ops::Deref for AgsProjectInvestigationInvestigationName {
2374    type Target = ::std::string::String;
2375    fn deref(&self) -> &::std::string::String {
2376        &self.0
2377    }
2378}
2379impl ::std::convert::From<AgsProjectInvestigationInvestigationName> for ::std::string::String {
2380    fn from(value: AgsProjectInvestigationInvestigationName) -> Self {
2381        value.0
2382    }
2383}
2384impl ::std::convert::From<&AgsProjectInvestigationInvestigationName>
2385    for AgsProjectInvestigationInvestigationName
2386{
2387    fn from(value: &AgsProjectInvestigationInvestigationName) -> Self {
2388        value.clone()
2389    }
2390}
2391impl ::std::str::FromStr for AgsProjectInvestigationInvestigationName {
2392    type Err = self::error::ConversionError;
2393    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2394        if value.chars().count() < 1usize {
2395            return Err("shorter than 1 characters".into());
2396        }
2397        Ok(Self(value.to_string()))
2398    }
2399}
2400impl ::std::convert::TryFrom<&str> for AgsProjectInvestigationInvestigationName {
2401    type Error = self::error::ConversionError;
2402    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2403        value.parse()
2404    }
2405}
2406impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectInvestigationInvestigationName {
2407    type Error = self::error::ConversionError;
2408    fn try_from(
2409        value: &::std::string::String,
2410    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2411        value.parse()
2412    }
2413}
2414impl ::std::convert::TryFrom<::std::string::String> for AgsProjectInvestigationInvestigationName {
2415    type Error = self::error::ConversionError;
2416    fn try_from(
2417        value: ::std::string::String,
2418    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2419        value.parse()
2420    }
2421}
2422impl<'de> ::serde::Deserialize<'de> for AgsProjectInvestigationInvestigationName {
2423    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2424    where
2425        D: ::serde::Deserializer<'de>,
2426    {
2427        ::std::string::String::deserialize(deserializer)?
2428            .parse()
2429            .map_err(|e: self::error::ConversionError| {
2430                <D::Error as ::serde::de::Error>::custom(e.to_string())
2431            })
2432    }
2433}
2434#[doc = "Name of the specific project/commission for the Project."]
2435#[doc = r""]
2436#[doc = r" <details><summary>JSON schema</summary>"]
2437#[doc = r""]
2438#[doc = r" ```json"]
2439#[doc = "{"]
2440#[doc = "  \"description\": \"Name of the specific project/commission for the Project.\","]
2441#[doc = "  \"type\": \"string\","]
2442#[doc = "  \"minLength\": 1,"]
2443#[doc = "  \"example\": \"C999 Geotechnical Package X\""]
2444#[doc = "}"]
2445#[doc = r" ```"]
2446#[doc = r" </details>"]
2447#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2448#[serde(transparent)]
2449pub struct AgsProjectProjectName(::std::string::String);
2450impl ::std::ops::Deref for AgsProjectProjectName {
2451    type Target = ::std::string::String;
2452    fn deref(&self) -> &::std::string::String {
2453        &self.0
2454    }
2455}
2456impl ::std::convert::From<AgsProjectProjectName> for ::std::string::String {
2457    fn from(value: AgsProjectProjectName) -> Self {
2458        value.0
2459    }
2460}
2461impl ::std::convert::From<&AgsProjectProjectName> for AgsProjectProjectName {
2462    fn from(value: &AgsProjectProjectName) -> Self {
2463        value.clone()
2464    }
2465}
2466impl ::std::str::FromStr for AgsProjectProjectName {
2467    type Err = self::error::ConversionError;
2468    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2469        if value.chars().count() < 1usize {
2470            return Err("shorter than 1 characters".into());
2471        }
2472        Ok(Self(value.to_string()))
2473    }
2474}
2475impl ::std::convert::TryFrom<&str> for AgsProjectProjectName {
2476    type Error = self::error::ConversionError;
2477    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2478        value.parse()
2479    }
2480}
2481impl ::std::convert::TryFrom<&::std::string::String> for AgsProjectProjectName {
2482    type Error = self::error::ConversionError;
2483    fn try_from(
2484        value: &::std::string::String,
2485    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2486        value.parse()
2487    }
2488}
2489impl ::std::convert::TryFrom<::std::string::String> for AgsProjectProjectName {
2490    type Error = self::error::ConversionError;
2491    fn try_from(
2492        value: ::std::string::String,
2493    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2494        value.parse()
2495    }
2496}
2497impl<'de> ::serde::Deserialize<'de> for AgsProjectProjectName {
2498    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2499    where
2500        D: ::serde::Deserializer<'de>,
2501    {
2502        ::std::string::String::deserialize(deserializer)?
2503            .parse()
2504            .map_err(|e: self::error::ConversionError| {
2505                <D::Error as ::serde::de::Error>::custom(e.to_string())
2506            })
2507    }
2508}
2509#[doc = "Defines the schema used for the AGSi file. It is recommended that, where possible, this object is output at the top of the file, for human readability."]
2510#[doc = r""]
2511#[doc = r" <details><summary>JSON schema</summary>"]
2512#[doc = r""]
2513#[doc = r" ```json"]
2514#[doc = "{"]
2515#[doc = "  \"description\": \"Defines the schema used for the AGSi file. It is recommended that, where possible, this object is output at the top of the file, for human readability.\","]
2516#[doc = "  \"type\": \"object\","]
2517#[doc = "  \"required\": ["]
2518#[doc = "    \"name\","]
2519#[doc = "    \"version\""]
2520#[doc = "  ],"]
2521#[doc = "  \"properties\": {"]
2522#[doc = "    \"link\": {"]
2523#[doc = "      \"description\": \"Web link (uri) to the AGS schema used herein.\","]
2524#[doc = "      \"type\": \"string\","]
2525#[doc = "      \"format\": \"uri\","]
2526#[doc = "      \"example\": \"https://ags-data-format-wg.gitlab.io/agsi/agsi_standard/1.0.1/\""]
2527#[doc = "    },"]
2528#[doc = "    \"name\": {"]
2529#[doc = "      \"description\": \"Name of the AGS schema used herein.\","]
2530#[doc = "      \"type\": \"string\","]
2531#[doc = "      \"minLength\": 1,"]
2532#[doc = "      \"example\": \"AGSi\""]
2533#[doc = "    },"]
2534#[doc = "    \"version\": {"]
2535#[doc = "      \"description\": \"Version of the named AGS schema used herein.\","]
2536#[doc = "      \"type\": \"string\","]
2537#[doc = "      \"minLength\": 1,"]
2538#[doc = "      \"example\": \"1.0.1\""]
2539#[doc = "    }"]
2540#[doc = "  },"]
2541#[doc = "  \"additionalProperties\": false"]
2542#[doc = "}"]
2543#[doc = r" ```"]
2544#[doc = r" </details>"]
2545#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
2546#[serde(deny_unknown_fields)]
2547pub struct AgsSchema {
2548    #[doc = "Web link (uri) to the AGS schema used herein."]
2549    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2550    pub link: ::std::option::Option<::std::string::String>,
2551    #[doc = "Name of the AGS schema used herein."]
2552    pub name: AgsSchemaName,
2553    #[doc = "Version of the named AGS schema used herein."]
2554    pub version: AgsSchemaVersion,
2555}
2556impl ::std::convert::From<&AgsSchema> for AgsSchema {
2557    fn from(value: &AgsSchema) -> Self {
2558        value.clone()
2559    }
2560}
2561impl AgsSchema {
2562    pub fn builder() -> builder::AgsSchema {
2563        Default::default()
2564    }
2565}
2566#[doc = "Name of the AGS schema used herein."]
2567#[doc = r""]
2568#[doc = r" <details><summary>JSON schema</summary>"]
2569#[doc = r""]
2570#[doc = r" ```json"]
2571#[doc = "{"]
2572#[doc = "  \"description\": \"Name of the AGS schema used herein.\","]
2573#[doc = "  \"type\": \"string\","]
2574#[doc = "  \"minLength\": 1,"]
2575#[doc = "  \"example\": \"AGSi\""]
2576#[doc = "}"]
2577#[doc = r" ```"]
2578#[doc = r" </details>"]
2579#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2580#[serde(transparent)]
2581pub struct AgsSchemaName(::std::string::String);
2582impl ::std::ops::Deref for AgsSchemaName {
2583    type Target = ::std::string::String;
2584    fn deref(&self) -> &::std::string::String {
2585        &self.0
2586    }
2587}
2588impl ::std::convert::From<AgsSchemaName> for ::std::string::String {
2589    fn from(value: AgsSchemaName) -> Self {
2590        value.0
2591    }
2592}
2593impl ::std::convert::From<&AgsSchemaName> for AgsSchemaName {
2594    fn from(value: &AgsSchemaName) -> Self {
2595        value.clone()
2596    }
2597}
2598impl ::std::str::FromStr for AgsSchemaName {
2599    type Err = self::error::ConversionError;
2600    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2601        if value.chars().count() < 1usize {
2602            return Err("shorter than 1 characters".into());
2603        }
2604        Ok(Self(value.to_string()))
2605    }
2606}
2607impl ::std::convert::TryFrom<&str> for AgsSchemaName {
2608    type Error = self::error::ConversionError;
2609    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2610        value.parse()
2611    }
2612}
2613impl ::std::convert::TryFrom<&::std::string::String> for AgsSchemaName {
2614    type Error = self::error::ConversionError;
2615    fn try_from(
2616        value: &::std::string::String,
2617    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2618        value.parse()
2619    }
2620}
2621impl ::std::convert::TryFrom<::std::string::String> for AgsSchemaName {
2622    type Error = self::error::ConversionError;
2623    fn try_from(
2624        value: ::std::string::String,
2625    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2626        value.parse()
2627    }
2628}
2629impl<'de> ::serde::Deserialize<'de> for AgsSchemaName {
2630    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2631    where
2632        D: ::serde::Deserializer<'de>,
2633    {
2634        ::std::string::String::deserialize(deserializer)?
2635            .parse()
2636            .map_err(|e: self::error::ConversionError| {
2637                <D::Error as ::serde::de::Error>::custom(e.to_string())
2638            })
2639    }
2640}
2641#[doc = "Version of the named AGS schema used herein."]
2642#[doc = r""]
2643#[doc = r" <details><summary>JSON schema</summary>"]
2644#[doc = r""]
2645#[doc = r" ```json"]
2646#[doc = "{"]
2647#[doc = "  \"description\": \"Version of the named AGS schema used herein.\","]
2648#[doc = "  \"type\": \"string\","]
2649#[doc = "  \"minLength\": 1,"]
2650#[doc = "  \"example\": \"1.0.1\""]
2651#[doc = "}"]
2652#[doc = r" ```"]
2653#[doc = r" </details>"]
2654#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2655#[serde(transparent)]
2656pub struct AgsSchemaVersion(::std::string::String);
2657impl ::std::ops::Deref for AgsSchemaVersion {
2658    type Target = ::std::string::String;
2659    fn deref(&self) -> &::std::string::String {
2660        &self.0
2661    }
2662}
2663impl ::std::convert::From<AgsSchemaVersion> for ::std::string::String {
2664    fn from(value: AgsSchemaVersion) -> Self {
2665        value.0
2666    }
2667}
2668impl ::std::convert::From<&AgsSchemaVersion> for AgsSchemaVersion {
2669    fn from(value: &AgsSchemaVersion) -> Self {
2670        value.clone()
2671    }
2672}
2673impl ::std::str::FromStr for AgsSchemaVersion {
2674    type Err = self::error::ConversionError;
2675    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2676        if value.chars().count() < 1usize {
2677            return Err("shorter than 1 characters".into());
2678        }
2679        Ok(Self(value.to_string()))
2680    }
2681}
2682impl ::std::convert::TryFrom<&str> for AgsSchemaVersion {
2683    type Error = self::error::ConversionError;
2684    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2685        value.parse()
2686    }
2687}
2688impl ::std::convert::TryFrom<&::std::string::String> for AgsSchemaVersion {
2689    type Error = self::error::ConversionError;
2690    fn try_from(
2691        value: &::std::string::String,
2692    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2693        value.parse()
2694    }
2695}
2696impl ::std::convert::TryFrom<::std::string::String> for AgsSchemaVersion {
2697    type Error = self::error::ConversionError;
2698    fn try_from(
2699        value: ::std::string::String,
2700    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2701        value.parse()
2702    }
2703}
2704impl<'de> ::serde::Deserialize<'de> for AgsSchemaVersion {
2705    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2706    where
2707        D: ::serde::Deserializer<'de>,
2708    {
2709        ::std::string::String::deserialize(deserializer)?
2710            .parse()
2711            .map_err(|e: self::error::ConversionError| {
2712                <D::Error as ::serde::de::Error>::custom(e.to_string())
2713            })
2714    }
2715}
2716#[doc = "Each agsiDataParameterValue object provides the data for a single defined parameter. The parameter value conveyed may be numeric, a profile of numeric values (e.g. a design line) or text. Refer to 7.2. Data rules and conventions for further details."]
2717#[doc = r""]
2718#[doc = r" <details><summary>JSON schema</summary>"]
2719#[doc = r""]
2720#[doc = r" ```json"]
2721#[doc = "{"]
2722#[doc = "  \"description\": \"Each agsiDataParameterValue object provides the data for a single defined parameter. The parameter value conveyed may be numeric, a profile of numeric values (e.g. a design line) or text. Refer to 7.2. Data rules and conventions for further details.\","]
2723#[doc = "  \"type\": \"object\","]
2724#[doc = "  \"required\": ["]
2725#[doc = "    \"codeID\""]
2726#[doc = "  ],"]
2727#[doc = "  \"properties\": {"]
2728#[doc = "    \"caseID\": {"]
2729#[doc = "      \"description\": \"Code (or text) that identifies the use case for a parameter. See  7.2.4. Use of (data) case for example use cases. If the input is a code, this shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. May be left blank or omitted, but the combination of codeID and caseID shall be unique for the instances of this object contained within a single parent object instance.\","]
2730#[doc = "      \"type\": \"string\","]
2731#[doc = "      \"example\": \"EC7Pile\""]
2732#[doc = "    },"]
2733#[doc = "    \"codeID\": {"]
2734#[doc = "      \"description\": \"Code that identifies the parameter. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique.\","]
2735#[doc = "      \"type\": \"string\","]
2736#[doc = "      \"minLength\": 1,"]
2737#[doc = "      \"example\": \"UndrainedShearStrength\""]
2738#[doc = "    },"]
2739#[doc = "    \"dataID\": {"]
2740#[doc = "      \"description\": \"Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
2741#[doc = "      \"type\": \"string\","]
2742#[doc = "      \"example\": \"42f18976-7352-4f67-9a6e-df89788343a7\""]
2743#[doc = "    },"]
2744#[doc = "    \"remarks\": {"]
2745#[doc = "      \"description\": \"Additional remarks, if required\","]
2746#[doc = "      \"type\": \"string\","]
2747#[doc = "      \"example\": \"Some remarks if required\""]
2748#[doc = "    },"]
2749#[doc = "    \"valueNumeric\": {"]
2750#[doc = "      \"description\": \"Numeric value of parameter, if applicable.\","]
2751#[doc = "      \"type\": \"number\","]
2752#[doc = "      \"example\": 75"]
2753#[doc = "    },"]
2754#[doc = "    \"valueProfile\": {"]
2755#[doc = "      \"description\": \"The profile of values as an ordered list of tuples of [independent variable value, parameter value]. Typically used to represent design lines. Refer to 1.6.9. Profiles or arrays of coordinate tuples for further information.\","]
2756#[doc = "      \"type\": \"array\","]
2757#[doc = "      \"$ref\": \"#/$defs/valueProfile\","]
2758#[doc = "      \"example\": ["]
2759#[doc = "        ["]
2760#[doc = "          6.0,"]
2761#[doc = "          100.0"]
2762#[doc = "        ],"]
2763#[doc = "        ["]
2764#[doc = "          -24.0,"]
2765#[doc = "          280.0"]
2766#[doc = "        ]"]
2767#[doc = "      ]"]
2768#[doc = "    },"]
2769#[doc = "    \"valueProfileIndVarCodeID\": {"]
2770#[doc = "      \"description\": \"Code that identifies the independent variable for a profile, i.e. what the property value varies against. The code shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object.\","]
2771#[doc = "      \"type\": \"string\","]
2772#[doc = "      \"example\": \"Elevation\""]
2773#[doc = "    },"]
2774#[doc = "    \"valueText\": {"]
2775#[doc = "      \"description\": \"Text based value of parameter, if applicable. For a profile (see below), this could be used for a concise description or representation of the profile. Unless specified otherwise, this attribute should only be used when the value is not numeric, i.e. valueNumeric not used.\","]
2776#[doc = "      \"type\": \"string\","]
2777#[doc = "      \"example\": \"100 + 6z (z=0 @ +6.0mOD)\""]
2778#[doc = "    }"]
2779#[doc = "  },"]
2780#[doc = "  \"additionalProperties\": false"]
2781#[doc = "}"]
2782#[doc = r" ```"]
2783#[doc = r" </details>"]
2784#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
2785#[serde(deny_unknown_fields)]
2786pub struct AgsiDataParameterValue {
2787    #[doc = "Code (or text) that identifies the use case for a parameter. See  7.2.4. Use of (data) case for example use cases. If the input is a code, this shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. May be left blank or omitted, but the combination of codeID and caseID shall be unique for the instances of this object contained within a single parent object instance."]
2788    #[serde(
2789        rename = "caseID",
2790        default,
2791        skip_serializing_if = "::std::option::Option::is_none"
2792    )]
2793    pub case_id: ::std::option::Option<::std::string::String>,
2794    #[doc = "Code that identifies the parameter. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique."]
2795    #[serde(rename = "codeID")]
2796    pub code_id: AgsiDataParameterValueCodeId,
2797    #[doc = "Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
2798    #[serde(
2799        rename = "dataID",
2800        default,
2801        skip_serializing_if = "::std::option::Option::is_none"
2802    )]
2803    pub data_id: ::std::option::Option<::std::string::String>,
2804    #[doc = "Additional remarks, if required"]
2805    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
2806    pub remarks: ::std::option::Option<::std::string::String>,
2807    #[serde(
2808        rename = "valueNumeric",
2809        default,
2810        skip_serializing_if = "::std::option::Option::is_none"
2811    )]
2812    pub value_numeric: ::std::option::Option<f64>,
2813    #[doc = "The profile of values as an ordered list of tuples of [independent variable value, parameter value]. Typically used to represent design lines. Refer to 1.6.9. Profiles or arrays of coordinate tuples for further information."]
2814    #[serde(
2815        rename = "valueProfile",
2816        default,
2817        skip_serializing_if = "::std::option::Option::is_none"
2818    )]
2819    pub value_profile: ::std::option::Option<ValueProfile>,
2820    #[doc = "Code that identifies the independent variable for a profile, i.e. what the property value varies against. The code shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object."]
2821    #[serde(
2822        rename = "valueProfileIndVarCodeID",
2823        default,
2824        skip_serializing_if = "::std::option::Option::is_none"
2825    )]
2826    pub value_profile_ind_var_code_id: ::std::option::Option<::std::string::String>,
2827    #[doc = "Text based value of parameter, if applicable. For a profile (see below), this could be used for a concise description or representation of the profile. Unless specified otherwise, this attribute should only be used when the value is not numeric, i.e. valueNumeric not used."]
2828    #[serde(
2829        rename = "valueText",
2830        default,
2831        skip_serializing_if = "::std::option::Option::is_none"
2832    )]
2833    pub value_text: ::std::option::Option<::std::string::String>,
2834}
2835impl ::std::convert::From<&AgsiDataParameterValue> for AgsiDataParameterValue {
2836    fn from(value: &AgsiDataParameterValue) -> Self {
2837        value.clone()
2838    }
2839}
2840impl AgsiDataParameterValue {
2841    pub fn builder() -> builder::AgsiDataParameterValue {
2842        Default::default()
2843    }
2844}
2845#[doc = "Code that identifies the parameter. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique."]
2846#[doc = r""]
2847#[doc = r" <details><summary>JSON schema</summary>"]
2848#[doc = r""]
2849#[doc = r" ```json"]
2850#[doc = "{"]
2851#[doc = "  \"description\": \"Code that identifies the parameter. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique.\","]
2852#[doc = "  \"type\": \"string\","]
2853#[doc = "  \"minLength\": 1,"]
2854#[doc = "  \"example\": \"UndrainedShearStrength\""]
2855#[doc = "}"]
2856#[doc = r" ```"]
2857#[doc = r" </details>"]
2858#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2859#[serde(transparent)]
2860pub struct AgsiDataParameterValueCodeId(::std::string::String);
2861impl ::std::ops::Deref for AgsiDataParameterValueCodeId {
2862    type Target = ::std::string::String;
2863    fn deref(&self) -> &::std::string::String {
2864        &self.0
2865    }
2866}
2867impl ::std::convert::From<AgsiDataParameterValueCodeId> for ::std::string::String {
2868    fn from(value: AgsiDataParameterValueCodeId) -> Self {
2869        value.0
2870    }
2871}
2872impl ::std::convert::From<&AgsiDataParameterValueCodeId> for AgsiDataParameterValueCodeId {
2873    fn from(value: &AgsiDataParameterValueCodeId) -> Self {
2874        value.clone()
2875    }
2876}
2877impl ::std::str::FromStr for AgsiDataParameterValueCodeId {
2878    type Err = self::error::ConversionError;
2879    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2880        if value.chars().count() < 1usize {
2881            return Err("shorter than 1 characters".into());
2882        }
2883        Ok(Self(value.to_string()))
2884    }
2885}
2886impl ::std::convert::TryFrom<&str> for AgsiDataParameterValueCodeId {
2887    type Error = self::error::ConversionError;
2888    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
2889        value.parse()
2890    }
2891}
2892impl ::std::convert::TryFrom<&::std::string::String> for AgsiDataParameterValueCodeId {
2893    type Error = self::error::ConversionError;
2894    fn try_from(
2895        value: &::std::string::String,
2896    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2897        value.parse()
2898    }
2899}
2900impl ::std::convert::TryFrom<::std::string::String> for AgsiDataParameterValueCodeId {
2901    type Error = self::error::ConversionError;
2902    fn try_from(
2903        value: ::std::string::String,
2904    ) -> ::std::result::Result<Self, self::error::ConversionError> {
2905        value.parse()
2906    }
2907}
2908impl<'de> ::serde::Deserialize<'de> for AgsiDataParameterValueCodeId {
2909    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
2910    where
2911        D: ::serde::Deserializer<'de>,
2912    {
2913        ::std::string::String::deserialize(deserializer)?
2914            .parse()
2915            .map_err(|e: self::error::ConversionError| {
2916                <D::Error as ::serde::de::Error>::custom(e.to_string())
2917            })
2918    }
2919}
2920#[doc = "An agsiDataPropertyFromFile object is a pointer to data contained within an external file, such as an AGS, CSV or spreadsheet file. This object also includes metadata describing the file being referenced. Refer to 7.2.5. Limitations of agsiDataPropertyFromFile for further requirements and recommendations relating to this object."]
2921#[doc = r""]
2922#[doc = r" <details><summary>JSON schema</summary>"]
2923#[doc = r""]
2924#[doc = r" ```json"]
2925#[doc = "{"]
2926#[doc = "  \"description\": \"An agsiDataPropertyFromFile object is a pointer to data contained within an external file, such as an AGS, CSV or spreadsheet file. This object also includes metadata describing the file being referenced. Refer to 7.2.5. Limitations of agsiDataPropertyFromFile for further requirements and recommendations relating to this object.\","]
2927#[doc = "  \"type\": \"object\","]
2928#[doc = "  \"required\": ["]
2929#[doc = "    \"fileURI\""]
2930#[doc = "  ],"]
2931#[doc = "  \"properties\": {"]
2932#[doc = "    \"dataID\": {"]
2933#[doc = "      \"description\": \"Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
2934#[doc = "      \"type\": \"string\","]
2935#[doc = "      \"example\": \"42f18976-7352-4f67-9a6e-df89788343a7\""]
2936#[doc = "    },"]
2937#[doc = "    \"date\": {"]
2938#[doc = "      \"description\": \"Date of issue of this revision.\","]
2939#[doc = "      \"type\": \"string\","]
2940#[doc = "      \"example\": \"2018-10-01\""]
2941#[doc = "    },"]
2942#[doc = "    \"description\": {"]
2943#[doc = "      \"description\": \"Short description of data file defined here.\","]
2944#[doc = "      \"type\": \"string\","]
2945#[doc = "      \"example\": \"Additional data points for top of Gotham Clay from legacy boreholes, based on points marked on plan reference xxxx in report yyyy etc\""]
2946#[doc = "    },"]
2947#[doc = "    \"fileFormat\": {"]
2948#[doc = "      \"description\": \"Format/encoding of the data, i.e. file format. Refer to 9.2. Vocabulary for list of common formats that may be used, or provide concise identification if other format used.\","]
2949#[doc = "      \"type\": \"string\","]
2950#[doc = "      \"example\": \"XLSX\""]
2951#[doc = "    },"]
2952#[doc = "    \"fileFormatVersion\": {"]
2953#[doc = "      \"description\": \"Additional version information for file format used, if required.\","]
2954#[doc = "      \"type\": \"string\","]
2955#[doc = "      \"example\": \"2019\""]
2956#[doc = "    },"]
2957#[doc = "    \"filePart\": {"]
2958#[doc = "      \"description\": \"Pointer to a specific part of a file, where required for disambiguation. For a spreadsheet file, this could be the name of the sheet used.\","]
2959#[doc = "      \"type\": \"string\","]
2960#[doc = "      \"example\": \"GothamClay\""]
2961#[doc = "    },"]
2962#[doc = "    \"fileURI\": {"]
2963#[doc = "      \"description\": \"URI-reference for the data file. This will be a relative link if file is included as part of the AGSi package. Alternatively, a link to a location within a project document system. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names.\","]
2964#[doc = "      \"type\": \"string\","]
2965#[doc = "      \"format\": \"uri-reference\","]
2966#[doc = "      \"example\": \"data/geology/legacydata.xlsx\""]
2967#[doc = "    },"]
2968#[doc = "    \"remarks\": {"]
2969#[doc = "      \"description\": \"Additional remarks, if required.\","]
2970#[doc = "      \"type\": \"string\","]
2971#[doc = "      \"example\": \"Some remarks if required\""]
2972#[doc = "    },"]
2973#[doc = "    \"revision\": {"]
2974#[doc = "      \"description\": \"Revision of the referenced file.\","]
2975#[doc = "      \"type\": \"string\","]
2976#[doc = "      \"example\": \"P3\""]
2977#[doc = "    },"]
2978#[doc = "    \"revisionInfo\": {"]
2979#[doc = "      \"description\": \"Revision notes for this revision of the referenced file.\","]
2980#[doc = "      \"type\": \"string\","]
2981#[doc = "      \"example\": \"Minor corrections, updated for GIR rev P2.\""]
2982#[doc = "    }"]
2983#[doc = "  },"]
2984#[doc = "  \"additionalProperties\": false"]
2985#[doc = "}"]
2986#[doc = r" ```"]
2987#[doc = r" </details>"]
2988#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
2989#[serde(deny_unknown_fields)]
2990pub struct AgsiDataPropertyFromFile {
2991    #[doc = "Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
2992    #[serde(
2993        rename = "dataID",
2994        default,
2995        skip_serializing_if = "::std::option::Option::is_none"
2996    )]
2997    pub data_id: ::std::option::Option<::std::string::String>,
2998    #[doc = "Date of issue of this revision."]
2999    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3000    pub date: ::std::option::Option<::std::string::String>,
3001    #[doc = "Short description of data file defined here."]
3002    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3003    pub description: ::std::option::Option<::std::string::String>,
3004    #[doc = "Format/encoding of the data, i.e. file format. Refer to 9.2. Vocabulary for list of common formats that may be used, or provide concise identification if other format used."]
3005    #[serde(
3006        rename = "fileFormat",
3007        default,
3008        skip_serializing_if = "::std::option::Option::is_none"
3009    )]
3010    pub file_format: ::std::option::Option<::std::string::String>,
3011    #[doc = "Additional version information for file format used, if required."]
3012    #[serde(
3013        rename = "fileFormatVersion",
3014        default,
3015        skip_serializing_if = "::std::option::Option::is_none"
3016    )]
3017    pub file_format_version: ::std::option::Option<::std::string::String>,
3018    #[doc = "Pointer to a specific part of a file, where required for disambiguation. For a spreadsheet file, this could be the name of the sheet used."]
3019    #[serde(
3020        rename = "filePart",
3021        default,
3022        skip_serializing_if = "::std::option::Option::is_none"
3023    )]
3024    pub file_part: ::std::option::Option<::std::string::String>,
3025    #[doc = "URI-reference for the data file. This will be a relative link if file is included as part of the AGSi package. Alternatively, a link to a location within a project document system. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names."]
3026    #[serde(rename = "fileURI")]
3027    pub file_uri: ::std::string::String,
3028    #[doc = "Additional remarks, if required."]
3029    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3030    pub remarks: ::std::option::Option<::std::string::String>,
3031    #[doc = "Revision of the referenced file."]
3032    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3033    pub revision: ::std::option::Option<::std::string::String>,
3034    #[doc = "Revision notes for this revision of the referenced file."]
3035    #[serde(
3036        rename = "revisionInfo",
3037        default,
3038        skip_serializing_if = "::std::option::Option::is_none"
3039    )]
3040    pub revision_info: ::std::option::Option<::std::string::String>,
3041}
3042impl ::std::convert::From<&AgsiDataPropertyFromFile> for AgsiDataPropertyFromFile {
3043    fn from(value: &AgsiDataPropertyFromFile) -> Self {
3044        value.clone()
3045    }
3046}
3047impl AgsiDataPropertyFromFile {
3048    pub fn builder() -> builder::AgsiDataPropertyFromFile {
3049        Default::default()
3050    }
3051}
3052#[doc = "Each agsiDataPropertySummary object provides a summary of data for a single defined property. Refer to 7.2. Data rules and conventions for further details."]
3053#[doc = r""]
3054#[doc = r" <details><summary>JSON schema</summary>"]
3055#[doc = r""]
3056#[doc = r" ```json"]
3057#[doc = "{"]
3058#[doc = "  \"description\": \"Each agsiDataPropertySummary object provides a summary of data for a single defined property. Refer to 7.2. Data rules and conventions for further details.\","]
3059#[doc = "  \"type\": \"object\","]
3060#[doc = "  \"required\": ["]
3061#[doc = "    \"codeID\""]
3062#[doc = "  ],"]
3063#[doc = "  \"properties\": {"]
3064#[doc = "    \"caseID\": {"]
3065#[doc = "      \"description\": \"Code (or text) that identifies the use case for a property. See 7.2.4. Use of (data) case for example use cases. If the input is a code, this shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. May be left blank or omitted, but the combination of codeID and caseID shall be unique for the instances of this object contained within a single parent object instance.\","]
3066#[doc = "      \"type\": \"string\","]
3067#[doc = "      \"example\": \"Clay\""]
3068#[doc = "    },"]
3069#[doc = "    \"codeID\": {"]
3070#[doc = "      \"description\": \"Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique.\","]
3071#[doc = "      \"type\": \"string\","]
3072#[doc = "      \"minLength\": 1,"]
3073#[doc = "      \"example\": \"TRIG_CU\""]
3074#[doc = "    },"]
3075#[doc = "    \"dataID\": {"]
3076#[doc = "      \"description\": \"Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3077#[doc = "      \"type\": \"string\","]
3078#[doc = "      \"example\": \"42f18976-7352-4f67-9a6e-df89788343a7\""]
3079#[doc = "    },"]
3080#[doc = "    \"remarks\": {"]
3081#[doc = "      \"description\": \"Additional remarks, if required.\","]
3082#[doc = "      \"type\": \"string\","]
3083#[doc = "      \"example\": \"Some remarks if required\""]
3084#[doc = "    },"]
3085#[doc = "    \"valueCount\": {"]
3086#[doc = "      \"description\": \"Number of results.\","]
3087#[doc = "      \"type\": \"number\","]
3088#[doc = "      \"example\": 58"]
3089#[doc = "    },"]
3090#[doc = "    \"valueMax\": {"]
3091#[doc = "      \"description\": \"Maximum value.\","]
3092#[doc = "      \"type\": \"number\","]
3093#[doc = "      \"example\": 345"]
3094#[doc = "    },"]
3095#[doc = "    \"valueMean\": {"]
3096#[doc = "      \"description\": \"Mean value.\","]
3097#[doc = "      \"type\": \"number\","]
3098#[doc = "      \"example\": 178.2"]
3099#[doc = "    },"]
3100#[doc = "    \"valueMin\": {"]
3101#[doc = "      \"description\": \"Minimum value.\","]
3102#[doc = "      \"type\": \"number\","]
3103#[doc = "      \"example\": 78"]
3104#[doc = "    },"]
3105#[doc = "    \"valueStdDev\": {"]
3106#[doc = "      \"description\": \"Standard deviation.\","]
3107#[doc = "      \"type\": \"number\","]
3108#[doc = "      \"example\": 36.4"]
3109#[doc = "    },"]
3110#[doc = "    \"valueSummaryText\": {"]
3111#[doc = "      \"description\": \"Alternative text based summary, if required or preferred. May be needed when some or all values are not numeric, e.g. <0.001.\","]
3112#[doc = "      \"type\": \"string\","]
3113#[doc = "      \"example\": \"<0.01 to 12.57, mean 3.21, (16 results)\""]
3114#[doc = "    }"]
3115#[doc = "  },"]
3116#[doc = "  \"additionalProperties\": false"]
3117#[doc = "}"]
3118#[doc = r" ```"]
3119#[doc = r" </details>"]
3120#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3121#[serde(deny_unknown_fields)]
3122pub struct AgsiDataPropertySummary {
3123    #[doc = "Code (or text) that identifies the use case for a property. See 7.2.4. Use of (data) case for example use cases. If the input is a code, this shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. May be left blank or omitted, but the combination of codeID and caseID shall be unique for the instances of this object contained within a single parent object instance."]
3124    #[serde(
3125        rename = "caseID",
3126        default,
3127        skip_serializing_if = "::std::option::Option::is_none"
3128    )]
3129    pub case_id: ::std::option::Option<::std::string::String>,
3130    #[doc = "Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique."]
3131    #[serde(rename = "codeID")]
3132    pub code_id: AgsiDataPropertySummaryCodeId,
3133    #[doc = "Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3134    #[serde(
3135        rename = "dataID",
3136        default,
3137        skip_serializing_if = "::std::option::Option::is_none"
3138    )]
3139    pub data_id: ::std::option::Option<::std::string::String>,
3140    #[doc = "Additional remarks, if required."]
3141    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3142    pub remarks: ::std::option::Option<::std::string::String>,
3143    #[serde(
3144        rename = "valueCount",
3145        default,
3146        skip_serializing_if = "::std::option::Option::is_none"
3147    )]
3148    pub value_count: ::std::option::Option<f64>,
3149    #[serde(
3150        rename = "valueMax",
3151        default,
3152        skip_serializing_if = "::std::option::Option::is_none"
3153    )]
3154    pub value_max: ::std::option::Option<f64>,
3155    #[serde(
3156        rename = "valueMean",
3157        default,
3158        skip_serializing_if = "::std::option::Option::is_none"
3159    )]
3160    pub value_mean: ::std::option::Option<f64>,
3161    #[serde(
3162        rename = "valueMin",
3163        default,
3164        skip_serializing_if = "::std::option::Option::is_none"
3165    )]
3166    pub value_min: ::std::option::Option<f64>,
3167    #[serde(
3168        rename = "valueStdDev",
3169        default,
3170        skip_serializing_if = "::std::option::Option::is_none"
3171    )]
3172    pub value_std_dev: ::std::option::Option<f64>,
3173    #[doc = "Alternative text based summary, if required or preferred. May be needed when some or all values are not numeric, e.g. <0.001."]
3174    #[serde(
3175        rename = "valueSummaryText",
3176        default,
3177        skip_serializing_if = "::std::option::Option::is_none"
3178    )]
3179    pub value_summary_text: ::std::option::Option<::std::string::String>,
3180}
3181impl ::std::convert::From<&AgsiDataPropertySummary> for AgsiDataPropertySummary {
3182    fn from(value: &AgsiDataPropertySummary) -> Self {
3183        value.clone()
3184    }
3185}
3186impl AgsiDataPropertySummary {
3187    pub fn builder() -> builder::AgsiDataPropertySummary {
3188        Default::default()
3189    }
3190}
3191#[doc = "Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique."]
3192#[doc = r""]
3193#[doc = r" <details><summary>JSON schema</summary>"]
3194#[doc = r""]
3195#[doc = r" ```json"]
3196#[doc = "{"]
3197#[doc = "  \"description\": \"Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique.\","]
3198#[doc = "  \"type\": \"string\","]
3199#[doc = "  \"minLength\": 1,"]
3200#[doc = "  \"example\": \"TRIG_CU\""]
3201#[doc = "}"]
3202#[doc = r" ```"]
3203#[doc = r" </details>"]
3204#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3205#[serde(transparent)]
3206pub struct AgsiDataPropertySummaryCodeId(::std::string::String);
3207impl ::std::ops::Deref for AgsiDataPropertySummaryCodeId {
3208    type Target = ::std::string::String;
3209    fn deref(&self) -> &::std::string::String {
3210        &self.0
3211    }
3212}
3213impl ::std::convert::From<AgsiDataPropertySummaryCodeId> for ::std::string::String {
3214    fn from(value: AgsiDataPropertySummaryCodeId) -> Self {
3215        value.0
3216    }
3217}
3218impl ::std::convert::From<&AgsiDataPropertySummaryCodeId> for AgsiDataPropertySummaryCodeId {
3219    fn from(value: &AgsiDataPropertySummaryCodeId) -> Self {
3220        value.clone()
3221    }
3222}
3223impl ::std::str::FromStr for AgsiDataPropertySummaryCodeId {
3224    type Err = self::error::ConversionError;
3225    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
3226        if value.chars().count() < 1usize {
3227            return Err("shorter than 1 characters".into());
3228        }
3229        Ok(Self(value.to_string()))
3230    }
3231}
3232impl ::std::convert::TryFrom<&str> for AgsiDataPropertySummaryCodeId {
3233    type Error = self::error::ConversionError;
3234    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
3235        value.parse()
3236    }
3237}
3238impl ::std::convert::TryFrom<&::std::string::String> for AgsiDataPropertySummaryCodeId {
3239    type Error = self::error::ConversionError;
3240    fn try_from(
3241        value: &::std::string::String,
3242    ) -> ::std::result::Result<Self, self::error::ConversionError> {
3243        value.parse()
3244    }
3245}
3246impl ::std::convert::TryFrom<::std::string::String> for AgsiDataPropertySummaryCodeId {
3247    type Error = self::error::ConversionError;
3248    fn try_from(
3249        value: ::std::string::String,
3250    ) -> ::std::result::Result<Self, self::error::ConversionError> {
3251        value.parse()
3252    }
3253}
3254impl<'de> ::serde::Deserialize<'de> for AgsiDataPropertySummaryCodeId {
3255    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
3256    where
3257        D: ::serde::Deserializer<'de>,
3258    {
3259        ::std::string::String::deserialize(deserializer)?
3260            .parse()
3261            .map_err(|e: self::error::ConversionError| {
3262                <D::Error as ::serde::de::Error>::custom(e.to_string())
3263            })
3264    }
3265}
3266#[doc = "Each agsiDataPropertyValue object provides the data for a single defined property. The property value conveyed may be numeric, a profile of numeric values (e.g. a design line) or text. Refer to 7.2. Data rules and conventions for further details."]
3267#[doc = r""]
3268#[doc = r" <details><summary>JSON schema</summary>"]
3269#[doc = r""]
3270#[doc = r" ```json"]
3271#[doc = "{"]
3272#[doc = "  \"description\": \"Each agsiDataPropertyValue object provides the data for a single defined property. The property value conveyed may be numeric, a profile of numeric values (e.g. a design line) or text. Refer to 7.2. Data rules and conventions for further details.\","]
3273#[doc = "  \"type\": \"object\","]
3274#[doc = "  \"required\": ["]
3275#[doc = "    \"codeID\""]
3276#[doc = "  ],"]
3277#[doc = "  \"properties\": {"]
3278#[doc = "    \"caseID\": {"]
3279#[doc = "      \"description\": \"Code (or text) that identifies the use case for a property. See  7.2.4. Use of (data) case for example use cases. If the input is a code, this shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. May be left blank or omitted, but the combination of codeID and caseID shall be unique for the instances of this object contained within a single parent object instance.\","]
3280#[doc = "      \"type\": \"string\","]
3281#[doc = "      \"example\": \"Clay\""]
3282#[doc = "    },"]
3283#[doc = "    \"codeID\": {"]
3284#[doc = "      \"description\": \"Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique.\","]
3285#[doc = "      \"type\": \"string\","]
3286#[doc = "      \"minLength\": 1,"]
3287#[doc = "      \"example\": \"TRIG_CU\""]
3288#[doc = "    },"]
3289#[doc = "    \"dataID\": {"]
3290#[doc = "      \"description\": \"Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3291#[doc = "      \"type\": \"string\","]
3292#[doc = "      \"example\": \"42f18976-7352-4f67-9a6e-df89788343a7\""]
3293#[doc = "    },"]
3294#[doc = "    \"remarks\": {"]
3295#[doc = "      \"description\": \"Additional remarks, if required.\","]
3296#[doc = "      \"type\": \"string\","]
3297#[doc = "      \"example\": \"Some remarks if required\""]
3298#[doc = "    },"]
3299#[doc = "    \"valueNumeric\": {"]
3300#[doc = "      \"description\": \"Numeric value of a single property.\","]
3301#[doc = "      \"type\": \"number\","]
3302#[doc = "      \"example\": 120"]
3303#[doc = "    },"]
3304#[doc = "    \"valueProfile\": {"]
3305#[doc = "      \"description\": \"A profile of values as an ordered list of tuples of [independent variable value, property value]. Typically used to provide properties at different elevations. Refer to 1.6.9. Profiles or arrays of coordinate tuples for further information.\","]
3306#[doc = "      \"type\": \"array\","]
3307#[doc = "      \"$ref\": \"#/$defs/valueProfile\","]
3308#[doc = "      \"example\": ["]
3309#[doc = "        ["]
3310#[doc = "          15.5,"]
3311#[doc = "          60.0"]
3312#[doc = "        ],"]
3313#[doc = "        ["]
3314#[doc = "          14.0,"]
3315#[doc = "          75.0"]
3316#[doc = "        ],"]
3317#[doc = "        ["]
3318#[doc = "          12.5,"]
3319#[doc = "          105.0"]
3320#[doc = "        ]"]
3321#[doc = "      ]"]
3322#[doc = "    },"]
3323#[doc = "    \"valueProfileIndVarCodeID\": {"]
3324#[doc = "      \"description\": \"Code that identifies the independent variable for a profile, i.e. what the property value varies against. The code shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object.\","]
3325#[doc = "      \"type\": \"string\","]
3326#[doc = "      \"example\": \"Elevation\""]
3327#[doc = "    },"]
3328#[doc = "    \"valueText\": {"]
3329#[doc = "      \"description\": \"Text value for property, if applicable.\","]
3330#[doc = "      \"type\": \"string\","]
3331#[doc = "      \"example\": \"Dry\""]
3332#[doc = "    }"]
3333#[doc = "  },"]
3334#[doc = "  \"additionalProperties\": false"]
3335#[doc = "}"]
3336#[doc = r" ```"]
3337#[doc = r" </details>"]
3338#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3339#[serde(deny_unknown_fields)]
3340pub struct AgsiDataPropertyValue {
3341    #[doc = "Code (or text) that identifies the use case for a property. See  7.2.4. Use of (data) case for example use cases. If the input is a code, this shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. May be left blank or omitted, but the combination of codeID and caseID shall be unique for the instances of this object contained within a single parent object instance."]
3342    #[serde(
3343        rename = "caseID",
3344        default,
3345        skip_serializing_if = "::std::option::Option::is_none"
3346    )]
3347    pub case_id: ::std::option::Option<::std::string::String>,
3348    #[doc = "Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique."]
3349    #[serde(rename = "codeID")]
3350    pub code_id: AgsiDataPropertyValueCodeId,
3351    #[doc = "Identifier for this data object. May be local to this file but all identifiers used within the Data group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3352    #[serde(
3353        rename = "dataID",
3354        default,
3355        skip_serializing_if = "::std::option::Option::is_none"
3356    )]
3357    pub data_id: ::std::option::Option<::std::string::String>,
3358    #[doc = "Additional remarks, if required."]
3359    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3360    pub remarks: ::std::option::Option<::std::string::String>,
3361    #[serde(
3362        rename = "valueNumeric",
3363        default,
3364        skip_serializing_if = "::std::option::Option::is_none"
3365    )]
3366    pub value_numeric: ::std::option::Option<f64>,
3367    #[doc = "A profile of values as an ordered list of tuples of [independent variable value, property value]. Typically used to provide properties at different elevations. Refer to 1.6.9. Profiles or arrays of coordinate tuples for further information."]
3368    #[serde(
3369        rename = "valueProfile",
3370        default,
3371        skip_serializing_if = "::std::option::Option::is_none"
3372    )]
3373    pub value_profile: ::std::option::Option<ValueProfile>,
3374    #[doc = "Code that identifies the independent variable for a profile, i.e. what the property value varies against. The code shall be defined in an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object."]
3375    #[serde(
3376        rename = "valueProfileIndVarCodeID",
3377        default,
3378        skip_serializing_if = "::std::option::Option::is_none"
3379    )]
3380    pub value_profile_ind_var_code_id: ::std::option::Option<::std::string::String>,
3381    #[doc = "Text value for property, if applicable."]
3382    #[serde(
3383        rename = "valueText",
3384        default,
3385        skip_serializing_if = "::std::option::Option::is_none"
3386    )]
3387    pub value_text: ::std::option::Option<::std::string::String>,
3388}
3389impl ::std::convert::From<&AgsiDataPropertyValue> for AgsiDataPropertyValue {
3390    fn from(value: &AgsiDataPropertyValue) -> Self {
3391        value.clone()
3392    }
3393}
3394impl AgsiDataPropertyValue {
3395    pub fn builder() -> builder::AgsiDataPropertyValue {
3396        Default::default()
3397    }
3398}
3399#[doc = "Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique."]
3400#[doc = r""]
3401#[doc = r" <details><summary>JSON schema</summary>"]
3402#[doc = r""]
3403#[doc = r" ```json"]
3404#[doc = "{"]
3405#[doc = "  \"description\": \"Code that identifies the property. Codes should be defined in either an agsProjectCode object, or in the code dictionary defined in the relevant agsProjectCodeSet object. The codes used by the instances of this object contained within a single parent object instance shall be unique, except that if caseID is used then only the combination of codeID and caseID needs to be unique.\","]
3406#[doc = "  \"type\": \"string\","]
3407#[doc = "  \"minLength\": 1,"]
3408#[doc = "  \"example\": \"TRIG_CU\""]
3409#[doc = "}"]
3410#[doc = r" ```"]
3411#[doc = r" </details>"]
3412#[derive(:: serde :: Serialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3413#[serde(transparent)]
3414pub struct AgsiDataPropertyValueCodeId(::std::string::String);
3415impl ::std::ops::Deref for AgsiDataPropertyValueCodeId {
3416    type Target = ::std::string::String;
3417    fn deref(&self) -> &::std::string::String {
3418        &self.0
3419    }
3420}
3421impl ::std::convert::From<AgsiDataPropertyValueCodeId> for ::std::string::String {
3422    fn from(value: AgsiDataPropertyValueCodeId) -> Self {
3423        value.0
3424    }
3425}
3426impl ::std::convert::From<&AgsiDataPropertyValueCodeId> for AgsiDataPropertyValueCodeId {
3427    fn from(value: &AgsiDataPropertyValueCodeId) -> Self {
3428        value.clone()
3429    }
3430}
3431impl ::std::str::FromStr for AgsiDataPropertyValueCodeId {
3432    type Err = self::error::ConversionError;
3433    fn from_str(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
3434        if value.chars().count() < 1usize {
3435            return Err("shorter than 1 characters".into());
3436        }
3437        Ok(Self(value.to_string()))
3438    }
3439}
3440impl ::std::convert::TryFrom<&str> for AgsiDataPropertyValueCodeId {
3441    type Error = self::error::ConversionError;
3442    fn try_from(value: &str) -> ::std::result::Result<Self, self::error::ConversionError> {
3443        value.parse()
3444    }
3445}
3446impl ::std::convert::TryFrom<&::std::string::String> for AgsiDataPropertyValueCodeId {
3447    type Error = self::error::ConversionError;
3448    fn try_from(
3449        value: &::std::string::String,
3450    ) -> ::std::result::Result<Self, self::error::ConversionError> {
3451        value.parse()
3452    }
3453}
3454impl ::std::convert::TryFrom<::std::string::String> for AgsiDataPropertyValueCodeId {
3455    type Error = self::error::ConversionError;
3456    fn try_from(
3457        value: ::std::string::String,
3458    ) -> ::std::result::Result<Self, self::error::ConversionError> {
3459        value.parse()
3460    }
3461}
3462impl<'de> ::serde::Deserialize<'de> for AgsiDataPropertyValueCodeId {
3463    fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
3464    where
3465        D: ::serde::Deserializer<'de>,
3466    {
3467        ::std::string::String::deserialize(deserializer)?
3468            .parse()
3469            .map_err(|e: self::error::ConversionError| {
3470                <D::Error as ::serde::de::Error>::custom(e.to_string())
3471            })
3472    }
3473}
3474#[doc = "An agsiGeometryAreaFromLines object defines an element as the area between top and/or bottom lines. This will typically be used on cross sections or fence diagrams. This is a linking object between model element and the source geometry for the lines. Refer to 6.2.4. Areas from lines for full details of how the area should be interpreted."]
3475#[doc = r""]
3476#[doc = r" <details><summary>JSON schema</summary>"]
3477#[doc = r""]
3478#[doc = r" ```json"]
3479#[doc = "{"]
3480#[doc = "  \"description\": \"An agsiGeometryAreaFromLines object defines an element as the area between top and/or bottom lines. This will typically be used on cross sections or fence diagrams. This is a linking object between model element and the source geometry for the lines. Refer to 6.2.4. Areas from lines for full details of how the area should be interpreted.\","]
3481#[doc = "  \"type\": \"object\","]
3482#[doc = "  \"anyOf\": ["]
3483#[doc = "    {"]
3484#[doc = "      \"required\": ["]
3485#[doc = "        \"agsiGeometryTop\""]
3486#[doc = "      ]"]
3487#[doc = "    },"]
3488#[doc = "    {"]
3489#[doc = "      \"required\": ["]
3490#[doc = "        \"agsiGeometryBottom\""]
3491#[doc = "      ]"]
3492#[doc = "    }"]
3493#[doc = "  ],"]
3494#[doc = "  \"properties\": {"]
3495#[doc = "    \"agsiGeometryBottom\": {"]
3496#[doc = "      \"description\": \"Geometry for bottom line, as embedded agsiGeometryFromFile object. Definition of both top and bottom lines is strongly recommended to minimise the risk of error. Refer to 6.2.4. Areas from lines for further details.\","]
3497#[doc = "      \"type\": \"object\","]
3498#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
3499#[doc = "    },"]
3500#[doc = "    \"agsiGeometryTop\": {"]
3501#[doc = "      \"description\": \"Geometry for top line, as embedded agsiGeometryFromFile object. Definition of both top and bottom lines is strongly recommended to minimise the risk of error. Refer to 6.2.4. Areas from lines for further details.\","]
3502#[doc = "      \"type\": \"object\","]
3503#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
3504#[doc = "    },"]
3505#[doc = "    \"description\": {"]
3506#[doc = "      \"description\": \"Short description of geometry defined here.\","]
3507#[doc = "      \"type\": \"string\","]
3508#[doc = "      \"example\": \"Section AA, Gotham Clay\""]
3509#[doc = "    },"]
3510#[doc = "    \"geometryID\": {"]
3511#[doc = "      \"description\": \"Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3512#[doc = "      \"type\": \"string\","]
3513#[doc = "      \"example\": \"SectionAAGCC\""]
3514#[doc = "    },"]
3515#[doc = "    \"remarks\": {"]
3516#[doc = "      \"description\": \"Additional remarks, if required.\","]
3517#[doc = "      \"type\": \"string\","]
3518#[doc = "      \"example\": \"Some remarks if required\""]
3519#[doc = "    }"]
3520#[doc = "  },"]
3521#[doc = "  \"additionalProperties\": false"]
3522#[doc = "}"]
3523#[doc = r" ```"]
3524#[doc = r" </details>"]
3525#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3526#[serde(untagged, deny_unknown_fields)]
3527pub enum AgsiGeometryAreaFromLines {
3528    Variant0 {
3529        #[doc = "Geometry for top line, as embedded agsiGeometryFromFile object. Definition of both top and bottom lines is strongly recommended to minimise the risk of error. Refer to 6.2.4. Areas from lines for further details."]
3530        #[serde(rename = "agsiGeometryTop")]
3531        agsi_geometry_top: AgsiGeometryFromFile,
3532        #[doc = "Short description of geometry defined here."]
3533        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3534        description: ::std::option::Option<::std::string::String>,
3535        #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3536        #[serde(
3537            rename = "geometryID",
3538            default,
3539            skip_serializing_if = "::std::option::Option::is_none"
3540        )]
3541        geometry_id: ::std::option::Option<::std::string::String>,
3542        #[doc = "Additional remarks, if required."]
3543        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3544        remarks: ::std::option::Option<::std::string::String>,
3545    },
3546    Variant1 {
3547        #[doc = "Geometry for bottom line, as embedded agsiGeometryFromFile object. Definition of both top and bottom lines is strongly recommended to minimise the risk of error. Refer to 6.2.4. Areas from lines for further details."]
3548        #[serde(rename = "agsiGeometryBottom")]
3549        agsi_geometry_bottom: AgsiGeometryFromFile,
3550        #[doc = "Short description of geometry defined here."]
3551        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3552        description: ::std::option::Option<::std::string::String>,
3553        #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3554        #[serde(
3555            rename = "geometryID",
3556            default,
3557            skip_serializing_if = "::std::option::Option::is_none"
3558        )]
3559        geometry_id: ::std::option::Option<::std::string::String>,
3560        #[doc = "Additional remarks, if required."]
3561        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3562        remarks: ::std::option::Option<::std::string::String>,
3563    },
3564}
3565impl ::std::convert::From<&Self> for AgsiGeometryAreaFromLines {
3566    fn from(value: &AgsiGeometryAreaFromLines) -> Self {
3567        value.clone()
3568    }
3569}
3570#[doc = "An agsiGeometryFromFile object is a pointer to geometry data contained within an external file, such as a CAD or model file. This object also includes metadata describing the file being referenced. Refer to 6.2. Geometry rules and conventions for further requirements and recommendations relating to this object."]
3571#[doc = r""]
3572#[doc = r" <details><summary>JSON schema</summary>"]
3573#[doc = r""]
3574#[doc = r" ```json"]
3575#[doc = "{"]
3576#[doc = "  \"description\": \"An agsiGeometryFromFile object is a pointer to geometry data contained within an external file, such as a CAD or model file. This object also includes metadata describing the file being referenced. Refer to 6.2. Geometry rules and conventions for further requirements and recommendations relating to this object.\","]
3577#[doc = "  \"type\": \"object\","]
3578#[doc = "  \"required\": ["]
3579#[doc = "    \"fileURI\""]
3580#[doc = "  ],"]
3581#[doc = "  \"properties\": {"]
3582#[doc = "    \"date\": {"]
3583#[doc = "      \"description\": \"Date of issue of this revision.\","]
3584#[doc = "      \"type\": \"string\","]
3585#[doc = "      \"format\": \"date\","]
3586#[doc = "      \"example\": \"2018-10-07\""]
3587#[doc = "    },"]
3588#[doc = "    \"description\": {"]
3589#[doc = "      \"description\": \"Short description of geometry defined here.\","]
3590#[doc = "      \"type\": \"string\","]
3591#[doc = "      \"example\": \"Top of GC\""]
3592#[doc = "    },"]
3593#[doc = "    \"fileFormat\": {"]
3594#[doc = "      \"description\": \"Format/encoding of the data, i.e. file format. Refer to vocabulary for list of common formats that may be used, or provide concise identification if other format used. Refer to 6.2.1. File formats for geometry for requirements and recommendations relating to file formats.\","]
3595#[doc = "      \"type\": \"string\","]
3596#[doc = "      \"example\": \"LandXML\""]
3597#[doc = "    },"]
3598#[doc = "    \"fileFormatVersion\": {"]
3599#[doc = "      \"description\": \"Additional version information for file format used, if required.\","]
3600#[doc = "      \"type\": \"string\","]
3601#[doc = "      \"example\": \"2.0\""]
3602#[doc = "    },"]
3603#[doc = "    \"filePart\": {"]
3604#[doc = "      \"description\": \"Pointer to a specific part of a file, where required for disambiguation. For CAD or model files this could be used for the layer/level on which the required data is located. For a geoJSON file with a feature collection this could be used to specify the id of the feature of interest.  Use with caution as the ability to interrogate only a specified layer/level/feature etc. may not be supported in all software.\","]
3605#[doc = "      \"type\": \"string\","]
3606#[doc = "      \"example\": \"GCTop\""]
3607#[doc = "    },"]
3608#[doc = "    \"fileURI\": {"]
3609#[doc = "      \"description\": \"URI-reference for the geometry file. This will be a relative link if file is included as part of the AGSi package. Alternatively, a link to a project document system location. Refer to 6.2.1. File formats for geometry for requirements and recommendations relating to linked files. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names.\","]
3610#[doc = "      \"type\": \"string\","]
3611#[doc = "      \"format\": \"uri-reference\","]
3612#[doc = "      \"example\": \"geometry/geology/GCtop.xml\""]
3613#[doc = "    },"]
3614#[doc = "    \"geometryID\": {"]
3615#[doc = "      \"description\": \"Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3616#[doc = "      \"type\": \"string\","]
3617#[doc = "      \"example\": \"GeologyGCCTop\""]
3618#[doc = "    },"]
3619#[doc = "    \"geometryType\": {"]
3620#[doc = "      \"description\": \"Nature of geometry represented.\","]
3621#[doc = "      \"type\": \"string\","]
3622#[doc = "      \"example\": \"Surface\""]
3623#[doc = "    },"]
3624#[doc = "    \"remarks\": {"]
3625#[doc = "      \"description\": \"Additional remarks, if required.\","]
3626#[doc = "      \"type\": \"string\","]
3627#[doc = "      \"example\": \"Some remarks if required\""]
3628#[doc = "    },"]
3629#[doc = "    \"revision\": {"]
3630#[doc = "      \"description\": \"Revision of the referenced file.\","]
3631#[doc = "      \"type\": \"string\","]
3632#[doc = "      \"example\": \"P2\""]
3633#[doc = "    },"]
3634#[doc = "    \"revisionInfo\": {"]
3635#[doc = "      \"description\": \"Revision notes for this revision of the referenced file.\","]
3636#[doc = "      \"type\": \"string\","]
3637#[doc = "      \"example\": \"Updated for GIR rev P2. Additional BH from 2018 GI included.\""]
3638#[doc = "    }"]
3639#[doc = "  },"]
3640#[doc = "  \"additionalProperties\": false"]
3641#[doc = "}"]
3642#[doc = r" ```"]
3643#[doc = r" </details>"]
3644#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3645#[serde(deny_unknown_fields)]
3646pub struct AgsiGeometryFromFile {
3647    #[doc = "Date of issue of this revision."]
3648    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3649    pub date: ::std::option::Option<::chrono::naive::NaiveDate>,
3650    #[doc = "Short description of geometry defined here."]
3651    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3652    pub description: ::std::option::Option<::std::string::String>,
3653    #[doc = "Format/encoding of the data, i.e. file format. Refer to vocabulary for list of common formats that may be used, or provide concise identification if other format used. Refer to 6.2.1. File formats for geometry for requirements and recommendations relating to file formats."]
3654    #[serde(
3655        rename = "fileFormat",
3656        default,
3657        skip_serializing_if = "::std::option::Option::is_none"
3658    )]
3659    pub file_format: ::std::option::Option<::std::string::String>,
3660    #[doc = "Additional version information for file format used, if required."]
3661    #[serde(
3662        rename = "fileFormatVersion",
3663        default,
3664        skip_serializing_if = "::std::option::Option::is_none"
3665    )]
3666    pub file_format_version: ::std::option::Option<::std::string::String>,
3667    #[doc = "Pointer to a specific part of a file, where required for disambiguation. For CAD or model files this could be used for the layer/level on which the required data is located. For a geoJSON file with a feature collection this could be used to specify the id of the feature of interest.  Use with caution as the ability to interrogate only a specified layer/level/feature etc. may not be supported in all software."]
3668    #[serde(
3669        rename = "filePart",
3670        default,
3671        skip_serializing_if = "::std::option::Option::is_none"
3672    )]
3673    pub file_part: ::std::option::Option<::std::string::String>,
3674    #[doc = "URI-reference for the geometry file. This will be a relative link if file is included as part of the AGSi package. Alternatively, a link to a project document system location. Refer to 6.2.1. File formats for geometry for requirements and recommendations relating to linked files. Spaces are not permitted in URI-reference strings. Refer to 1.6.6. URI for how to handle spaces in file paths or names."]
3675    #[serde(rename = "fileURI")]
3676    pub file_uri: ::std::string::String,
3677    #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3678    #[serde(
3679        rename = "geometryID",
3680        default,
3681        skip_serializing_if = "::std::option::Option::is_none"
3682    )]
3683    pub geometry_id: ::std::option::Option<::std::string::String>,
3684    #[doc = "Nature of geometry represented."]
3685    #[serde(
3686        rename = "geometryType",
3687        default,
3688        skip_serializing_if = "::std::option::Option::is_none"
3689    )]
3690    pub geometry_type: ::std::option::Option<::std::string::String>,
3691    #[doc = "Additional remarks, if required."]
3692    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3693    pub remarks: ::std::option::Option<::std::string::String>,
3694    #[doc = "Revision of the referenced file."]
3695    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3696    pub revision: ::std::option::Option<::std::string::String>,
3697    #[doc = "Revision notes for this revision of the referenced file."]
3698    #[serde(
3699        rename = "revisionInfo",
3700        default,
3701        skip_serializing_if = "::std::option::Option::is_none"
3702    )]
3703    pub revision_info: ::std::option::Option<::std::string::String>,
3704}
3705impl ::std::convert::From<&AgsiGeometryFromFile> for AgsiGeometryFromFile {
3706    fn from(value: &AgsiGeometryFromFile) -> Self {
3707        value.clone()
3708    }
3709}
3710impl AgsiGeometryFromFile {
3711    pub fn builder() -> builder::AgsiGeometryFromFile {
3712        Default::default()
3713    }
3714}
3715#[doc = "An agsiGeometryLayer object is a volumetric element bounded by two infinite horizontal planes at specified elevations. May be used for defining each element in a stratigraphical column (one dimensional) model. See 6.2.5. Simple 1D layers for interpretation."]
3716#[doc = r""]
3717#[doc = r" <details><summary>JSON schema</summary>"]
3718#[doc = r""]
3719#[doc = r" ```json"]
3720#[doc = "{"]
3721#[doc = "  \"description\": \"An agsiGeometryLayer object is a volumetric element bounded by two infinite horizontal planes at specified elevations. May be used for defining each element in a stratigraphical column (one dimensional) model. See 6.2.5. Simple 1D layers for interpretation.\","]
3722#[doc = "  \"type\": \"object\","]
3723#[doc = "  \"anyOf\": ["]
3724#[doc = "    {"]
3725#[doc = "      \"required\": ["]
3726#[doc = "        \"topElevation\""]
3727#[doc = "      ]"]
3728#[doc = "    },"]
3729#[doc = "    {"]
3730#[doc = "      \"required\": ["]
3731#[doc = "        \"bottomElevation\""]
3732#[doc = "      ]"]
3733#[doc = "    }"]
3734#[doc = "  ],"]
3735#[doc = "  \"properties\": {"]
3736#[doc = "    \"bottomElevation\": {"]
3737#[doc = "      \"description\": \"Elevation (z) of the bottom surface. Definition of both top and bottom surfaces is recommended to minimise the risk of error.\","]
3738#[doc = "      \"type\": \"number\","]
3739#[doc = "      \"example\": -30"]
3740#[doc = "    },"]
3741#[doc = "    \"description\": {"]
3742#[doc = "      \"description\": \"Short description of geometry defined here.\","]
3743#[doc = "      \"type\": \"string\","]
3744#[doc = "      \"example\": \"Design profile, pile design: Gotham Clay\""]
3745#[doc = "    },"]
3746#[doc = "    \"geometryID\": {"]
3747#[doc = "      \"description\": \"Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3748#[doc = "      \"type\": \"string\","]
3749#[doc = "      \"example\": \"DesignPileGCC\""]
3750#[doc = "    },"]
3751#[doc = "    \"remarks\": {"]
3752#[doc = "      \"description\": \"Additional remarks, if required.\","]
3753#[doc = "      \"type\": \"string\","]
3754#[doc = "      \"example\": \"Some remarks if required\""]
3755#[doc = "    },"]
3756#[doc = "    \"topElevation\": {"]
3757#[doc = "      \"description\": \"Elevation (z) of the top surface. Definition of both top and bottom surfaces is recommended to minimise the risk of error.\","]
3758#[doc = "      \"type\": \"number\","]
3759#[doc = "      \"example\": 6"]
3760#[doc = "    }"]
3761#[doc = "  },"]
3762#[doc = "  \"additionalProperties\": false"]
3763#[doc = "}"]
3764#[doc = r" ```"]
3765#[doc = r" </details>"]
3766#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3767#[serde(untagged, deny_unknown_fields)]
3768pub enum AgsiGeometryLayer {
3769    Variant0 {
3770        #[doc = "Short description of geometry defined here."]
3771        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3772        description: ::std::option::Option<::std::string::String>,
3773        #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3774        #[serde(
3775            rename = "geometryID",
3776            default,
3777            skip_serializing_if = "::std::option::Option::is_none"
3778        )]
3779        geometry_id: ::std::option::Option<::std::string::String>,
3780        #[doc = "Additional remarks, if required."]
3781        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3782        remarks: ::std::option::Option<::std::string::String>,
3783        #[serde(rename = "topElevation")]
3784        top_elevation: f64,
3785    },
3786    Variant1 {
3787        #[serde(rename = "bottomElevation")]
3788        bottom_elevation: f64,
3789        #[doc = "Short description of geometry defined here."]
3790        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3791        description: ::std::option::Option<::std::string::String>,
3792        #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3793        #[serde(
3794            rename = "geometryID",
3795            default,
3796            skip_serializing_if = "::std::option::Option::is_none"
3797        )]
3798        geometry_id: ::std::option::Option<::std::string::String>,
3799        #[doc = "Additional remarks, if required."]
3800        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3801        remarks: ::std::option::Option<::std::string::String>,
3802    },
3803}
3804impl ::std::convert::From<&Self> for AgsiGeometryLayer {
3805    fn from(value: &AgsiGeometryLayer) -> Self {
3806        value.clone()
3807    }
3808}
3809#[doc = "An agsiGeometryPlane object is an infinite horizontal plane at a specified elevation."]
3810#[doc = r""]
3811#[doc = r" <details><summary>JSON schema</summary>"]
3812#[doc = r""]
3813#[doc = r" ```json"]
3814#[doc = "{"]
3815#[doc = "  \"description\": \"An agsiGeometryPlane object is an infinite horizontal plane at a specified elevation.\","]
3816#[doc = "  \"type\": \"object\","]
3817#[doc = "  \"required\": ["]
3818#[doc = "    \"elevation\""]
3819#[doc = "  ],"]
3820#[doc = "  \"properties\": {"]
3821#[doc = "    \"description\": {"]
3822#[doc = "      \"description\": \"Short description of geometry defined here.\","]
3823#[doc = "      \"type\": \"string\","]
3824#[doc = "      \"example\": \"Base of design model\""]
3825#[doc = "    },"]
3826#[doc = "    \"elevation\": {"]
3827#[doc = "      \"description\": \"Elevation (z) of the plane.\","]
3828#[doc = "      \"type\": \"number\","]
3829#[doc = "      \"example\": -30"]
3830#[doc = "    },"]
3831#[doc = "    \"geometryID\": {"]
3832#[doc = "      \"description\": \"Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3833#[doc = "      \"type\": \"string\","]
3834#[doc = "      \"example\": \"DesignBase\""]
3835#[doc = "    },"]
3836#[doc = "    \"remarks\": {"]
3837#[doc = "      \"description\": \"Additional remarks, if required.\","]
3838#[doc = "      \"type\": \"string\","]
3839#[doc = "      \"example\": \"Some remarks if required\""]
3840#[doc = "    }"]
3841#[doc = "  },"]
3842#[doc = "  \"additionalProperties\": false"]
3843#[doc = "}"]
3844#[doc = r" ```"]
3845#[doc = r" </details>"]
3846#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3847#[serde(deny_unknown_fields)]
3848pub struct AgsiGeometryPlane {
3849    #[doc = "Short description of geometry defined here."]
3850    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3851    pub description: ::std::option::Option<::std::string::String>,
3852    pub elevation: f64,
3853    #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3854    #[serde(
3855        rename = "geometryID",
3856        default,
3857        skip_serializing_if = "::std::option::Option::is_none"
3858    )]
3859    pub geometry_id: ::std::option::Option<::std::string::String>,
3860    #[doc = "Additional remarks, if required."]
3861    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3862    pub remarks: ::std::option::Option<::std::string::String>,
3863}
3864impl ::std::convert::From<&AgsiGeometryPlane> for AgsiGeometryPlane {
3865    fn from(value: &AgsiGeometryPlane) -> Self {
3866        value.clone()
3867    }
3868}
3869impl AgsiGeometryPlane {
3870    pub fn builder() -> builder::AgsiGeometryPlane {
3871        Default::default()
3872    }
3873}
3874#[doc = "An agsiGeometryVolFromSurfaces object defines an element as the volumetric element (solid) between top and/or bottom surfaces. This is a linking object between model element and the source geometry for the surfaces, which will normally be agsiGeometryFromFile objects. Refer to 6.2.3. Volumes from surfaces for full details of how the volume should be interpreted."]
3875#[doc = r""]
3876#[doc = r" <details><summary>JSON schema</summary>"]
3877#[doc = r""]
3878#[doc = r" ```json"]
3879#[doc = "{"]
3880#[doc = "  \"description\": \"An agsiGeometryVolFromSurfaces object defines an element as the volumetric element (solid) between top and/or bottom surfaces. This is a linking object between model element and the source geometry for the surfaces, which will normally be agsiGeometryFromFile objects. Refer to 6.2.3. Volumes from surfaces for full details of how the volume should be interpreted.\","]
3881#[doc = "  \"type\": \"object\","]
3882#[doc = "  \"anyOf\": ["]
3883#[doc = "    {"]
3884#[doc = "      \"required\": ["]
3885#[doc = "        \"agsiGeometryTop\""]
3886#[doc = "      ]"]
3887#[doc = "    },"]
3888#[doc = "    {"]
3889#[doc = "      \"required\": ["]
3890#[doc = "        \"agsiGeometryBottom\""]
3891#[doc = "      ]"]
3892#[doc = "    }"]
3893#[doc = "  ],"]
3894#[doc = "  \"properties\": {"]
3895#[doc = "    \"agsiGeometryBottom\": {"]
3896#[doc = "      \"description\": \"Geometry for bottom surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details.\","]
3897#[doc = "      \"type\": \"object\","]
3898#[doc = "      \"anyOf\": ["]
3899#[doc = "        {"]
3900#[doc = "          \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
3901#[doc = "        },"]
3902#[doc = "        {"]
3903#[doc = "          \"$ref\": \"#/$defs/agsiGeometryPlane\""]
3904#[doc = "        }"]
3905#[doc = "      ]"]
3906#[doc = "    },"]
3907#[doc = "    \"agsiGeometryTop\": {"]
3908#[doc = "      \"description\": \"Geometry for top surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details.\","]
3909#[doc = "      \"type\": \"object\","]
3910#[doc = "      \"anyOf\": ["]
3911#[doc = "        {"]
3912#[doc = "          \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
3913#[doc = "        },"]
3914#[doc = "        {"]
3915#[doc = "          \"$ref\": \"#/$defs/agsiGeometryPlane\""]
3916#[doc = "        }"]
3917#[doc = "      ]"]
3918#[doc = "    },"]
3919#[doc = "    \"description\": {"]
3920#[doc = "      \"description\": \"Short description of geometry defined here.\","]
3921#[doc = "      \"type\": \"string\","]
3922#[doc = "      \"example\": \"Gotham Clay\""]
3923#[doc = "    },"]
3924#[doc = "    \"geometryID\": {"]
3925#[doc = "      \"description\": \"Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it.\","]
3926#[doc = "      \"type\": \"string\","]
3927#[doc = "      \"example\": \"GeologyGCC\""]
3928#[doc = "    },"]
3929#[doc = "    \"remarks\": {"]
3930#[doc = "      \"description\": \"Additional remarks, if required.\","]
3931#[doc = "      \"type\": \"string\","]
3932#[doc = "      \"example\": \"Some remarks if required\""]
3933#[doc = "    }"]
3934#[doc = "  },"]
3935#[doc = "  \"additionalProperties\": false"]
3936#[doc = "}"]
3937#[doc = r" ```"]
3938#[doc = r" </details>"]
3939#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
3940#[serde(untagged, deny_unknown_fields)]
3941pub enum AgsiGeometryVolFromSurfaces {
3942    Variant0 {
3943        #[doc = "Geometry for top surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details."]
3944        #[serde(rename = "agsiGeometryTop")]
3945        agsi_geometry_top: AgsiGeometryVolFromSurfacesVariant0AgsiGeometryTop,
3946        #[doc = "Short description of geometry defined here."]
3947        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3948        description: ::std::option::Option<::std::string::String>,
3949        #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3950        #[serde(
3951            rename = "geometryID",
3952            default,
3953            skip_serializing_if = "::std::option::Option::is_none"
3954        )]
3955        geometry_id: ::std::option::Option<::std::string::String>,
3956        #[doc = "Additional remarks, if required."]
3957        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3958        remarks: ::std::option::Option<::std::string::String>,
3959    },
3960    Variant1 {
3961        #[doc = "Geometry for bottom surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details."]
3962        #[serde(rename = "agsiGeometryBottom")]
3963        agsi_geometry_bottom: AgsiGeometryVolFromSurfacesVariant1AgsiGeometryBottom,
3964        #[doc = "Short description of geometry defined here."]
3965        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3966        description: ::std::option::Option<::std::string::String>,
3967        #[doc = "Identifier for this geometry object. May be local to this file but all identifiers used within the Geometry group of objects shall be unique. Alternatively a UUID may be used (recommended for large datasets). Use of this attribute is optional and it is not referenced anywhere else in the schema, but it may be beneficial to include it to help with data control and integrity, and some applications may require or benefit from it."]
3968        #[serde(
3969            rename = "geometryID",
3970            default,
3971            skip_serializing_if = "::std::option::Option::is_none"
3972        )]
3973        geometry_id: ::std::option::Option<::std::string::String>,
3974        #[doc = "Additional remarks, if required."]
3975        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
3976        remarks: ::std::option::Option<::std::string::String>,
3977    },
3978}
3979impl ::std::convert::From<&Self> for AgsiGeometryVolFromSurfaces {
3980    fn from(value: &AgsiGeometryVolFromSurfaces) -> Self {
3981        value.clone()
3982    }
3983}
3984#[doc = "Geometry for top surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details."]
3985#[doc = r""]
3986#[doc = r" <details><summary>JSON schema</summary>"]
3987#[doc = r""]
3988#[doc = r" ```json"]
3989#[doc = "{"]
3990#[doc = "  \"description\": \"Geometry for top surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details.\","]
3991#[doc = "  \"type\": \"object\","]
3992#[doc = "  \"anyOf\": ["]
3993#[doc = "    {"]
3994#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
3995#[doc = "    },"]
3996#[doc = "    {"]
3997#[doc = "      \"$ref\": \"#/$defs/agsiGeometryPlane\""]
3998#[doc = "    }"]
3999#[doc = "  ]"]
4000#[doc = "}"]
4001#[doc = r" ```"]
4002#[doc = r" </details>"]
4003#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4004#[serde(untagged)]
4005pub enum AgsiGeometryVolFromSurfacesVariant0AgsiGeometryTop {
4006    FromFile(AgsiGeometryFromFile),
4007    Plane(AgsiGeometryPlane),
4008}
4009impl ::std::convert::From<&Self> for AgsiGeometryVolFromSurfacesVariant0AgsiGeometryTop {
4010    fn from(value: &AgsiGeometryVolFromSurfacesVariant0AgsiGeometryTop) -> Self {
4011        value.clone()
4012    }
4013}
4014impl ::std::convert::From<AgsiGeometryFromFile>
4015    for AgsiGeometryVolFromSurfacesVariant0AgsiGeometryTop
4016{
4017    fn from(value: AgsiGeometryFromFile) -> Self {
4018        Self::FromFile(value)
4019    }
4020}
4021impl ::std::convert::From<AgsiGeometryPlane>
4022    for AgsiGeometryVolFromSurfacesVariant0AgsiGeometryTop
4023{
4024    fn from(value: AgsiGeometryPlane) -> Self {
4025        Self::Plane(value)
4026    }
4027}
4028#[doc = "Geometry for bottom surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details."]
4029#[doc = r""]
4030#[doc = r" <details><summary>JSON schema</summary>"]
4031#[doc = r""]
4032#[doc = r" ```json"]
4033#[doc = "{"]
4034#[doc = "  \"description\": \"Geometry for bottom surface, as embedded agsiGeometryFromFile or agsiGeometryPlane object. Definition of both top and bottom surfaces is recommended to minimise the risk of error. Refer to 6.2.3. Volumes from surfaces for further details.\","]
4035#[doc = "  \"type\": \"object\","]
4036#[doc = "  \"anyOf\": ["]
4037#[doc = "    {"]
4038#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4039#[doc = "    },"]
4040#[doc = "    {"]
4041#[doc = "      \"$ref\": \"#/$defs/agsiGeometryPlane\""]
4042#[doc = "    }"]
4043#[doc = "  ]"]
4044#[doc = "}"]
4045#[doc = r" ```"]
4046#[doc = r" </details>"]
4047#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4048#[serde(untagged)]
4049pub enum AgsiGeometryVolFromSurfacesVariant1AgsiGeometryBottom {
4050    FromFile(AgsiGeometryFromFile),
4051    Plane(AgsiGeometryPlane),
4052}
4053impl ::std::convert::From<&Self> for AgsiGeometryVolFromSurfacesVariant1AgsiGeometryBottom {
4054    fn from(value: &AgsiGeometryVolFromSurfacesVariant1AgsiGeometryBottom) -> Self {
4055        value.clone()
4056    }
4057}
4058impl ::std::convert::From<AgsiGeometryFromFile>
4059    for AgsiGeometryVolFromSurfacesVariant1AgsiGeometryBottom
4060{
4061    fn from(value: AgsiGeometryFromFile) -> Self {
4062        Self::FromFile(value)
4063    }
4064}
4065impl ::std::convert::From<AgsiGeometryPlane>
4066    for AgsiGeometryVolFromSurfacesVariant1AgsiGeometryBottom
4067{
4068    fn from(value: AgsiGeometryPlane) -> Self {
4069        Self::Plane(value)
4070    }
4071}
4072#[doc = "An agsiModel object is the parent object for a single model. It contains general metadata for a model as well as the embedded element and boundary objects that make up the model. It may also contain embedded sets of observation objects, which can be used to represent exploratory holes, their geology and other data, as well as general observations. agsiModel may also include the alignments of related sections (the sections themselves willl normally be separate models).  There can be several models, each defined by an agsiModel object, in an AGSi file."]
4073#[doc = r""]
4074#[doc = r" <details><summary>JSON schema</summary>"]
4075#[doc = r""]
4076#[doc = r" ```json"]
4077#[doc = "{"]
4078#[doc = "  \"description\": \"An agsiModel object is the parent object for a single model. It contains general metadata for a model as well as the embedded element and boundary objects that make up the model. It may also contain embedded sets of observation objects, which can be used to represent exploratory holes, their geology and other data, as well as general observations. agsiModel may also include the alignments of related sections (the sections themselves willl normally be separate models).  There can be several models, each defined by an agsiModel object, in an AGSi file.\","]
4079#[doc = "  \"type\": \"object\","]
4080#[doc = "  \"properties\": {"]
4081#[doc = "    \"agsiModelAlignment\": {"]
4082#[doc = "      \"description\": \"Array of embedded agsiModelAlignment objects. Used to define the (section) alignments in this (primary) model object.\","]
4083#[doc = "      \"type\": \"array\","]
4084#[doc = "      \"items\": {"]
4085#[doc = "        \"$ref\": \"#/$defs/agsiModelAlignment\""]
4086#[doc = "      }"]
4087#[doc = "    },"]
4088#[doc = "    \"agsiModelBoundary\": {"]
4089#[doc = "      \"description\": \"Single embedded agsiModelBoundary object.\","]
4090#[doc = "      \"type\": \"object\","]
4091#[doc = "      \"$ref\": \"#/$defs/agsiModelBoundary\""]
4092#[doc = "    },"]
4093#[doc = "    \"agsiModelElement\": {"]
4094#[doc = "      \"description\": \"Array of embedded agsiModelElement objects.\","]
4095#[doc = "      \"type\": \"array\","]
4096#[doc = "      \"items\": {"]
4097#[doc = "        \"$ref\": \"#/$defs/agsiModelElement\""]
4098#[doc = "      }"]
4099#[doc = "    },"]
4100#[doc = "    \"agsiObservationSet\": {"]
4101#[doc = "      \"description\": \"Array of embedded agsiObservationSet objects.\","]
4102#[doc = "      \"type\": \"array\","]
4103#[doc = "      \"items\": {"]
4104#[doc = "        \"$ref\": \"#/$defs/agsiObservationSet\""]
4105#[doc = "      }"]
4106#[doc = "    },"]
4107#[doc = "    \"alignmentID\": {"]
4108#[doc = "      \"description\": \"Reference to ID of an agsiModelAlignment object found in another model. Required by 2D section models to identify the alignment of the section.\","]
4109#[doc = "      \"type\": \"string\","]
4110#[doc = "      \"example\": \"sectionAA\""]
4111#[doc = "    },"]
4112#[doc = "    \"category\": {"]
4113#[doc = "      \"description\": \"Category of model.\","]
4114#[doc = "      \"type\": \"string\","]
4115#[doc = "      \"example\": \"Observational\""]
4116#[doc = "    },"]
4117#[doc = "    \"coordSystemID\": {"]
4118#[doc = "      \"description\": \"Reference to coordinate system applicable to this model (relevant agsProjectCoordinateSystem object).\","]
4119#[doc = "      \"type\": \"string\","]
4120#[doc = "      \"example\": \"MetroXYZ\""]
4121#[doc = "    },"]
4122#[doc = "    \"description\": {"]
4123#[doc = "      \"description\": \"More verbose description of model, if required.\","]
4124#[doc = "      \"type\": \"string\","]
4125#[doc = "      \"example\": \"C999 Package X Sitewide geological model exported from SomeGeoModelSoftware. Incorporates 2018 GI data \""]
4126#[doc = "    },"]
4127#[doc = "    \"documentSetID\": {"]
4128#[doc = "      \"description\": \"Reference to documentation relating to model (reference to agsProjectDocumentSet object).\","]
4129#[doc = "      \"type\": \"string\","]
4130#[doc = "      \"example\": \"ExampleDocSetID\""]
4131#[doc = "    },"]
4132#[doc = "    \"domain\": {"]
4133#[doc = "      \"description\": \"Domain of model.\","]
4134#[doc = "      \"type\": \"string\","]
4135#[doc = "      \"example\": \"Engineering geology\""]
4136#[doc = "    },"]
4137#[doc = "    \"input\": {"]
4138#[doc = "      \"description\": \"Short description of input data used by model an/or cross reference to document describing this.\","]
4139#[doc = "      \"type\": \"string\","]
4140#[doc = "      \"example\": \"Input data described in GIR section 3.3.2\""]
4141#[doc = "    },"]
4142#[doc = "    \"method\": {"]
4143#[doc = "      \"description\": \"Short description of method used to create model, including software used, and/or reference to the document where this is discussed.\","]
4144#[doc = "      \"type\": \"string\","]
4145#[doc = "      \"example\": \"3D model created in SomeGeoModelSoftware. See GIR section 3.3.3 for details.\""]
4146#[doc = "    },"]
4147#[doc = "    \"modelID\": {"]
4148#[doc = "      \"description\": \"Identifier for the model. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for modelID should be unique within the AGSi file. \","]
4149#[doc = "      \"type\": \"string\","]
4150#[doc = "      \"example\": \"1fb599ab-c040-408d-aba0-85b18bb506c2\""]
4151#[doc = "    },"]
4152#[doc = "    \"modelName\": {"]
4153#[doc = "      \"description\": \"Short name of model.\","]
4154#[doc = "      \"type\": \"string\","]
4155#[doc = "      \"example\": \"Sitewide geological model\""]
4156#[doc = "    },"]
4157#[doc = "    \"modelType\": {"]
4158#[doc = "      \"description\": \"Type of model. Incorporates domain and category of model.\","]
4159#[doc = "      \"type\": \"string\","]
4160#[doc = "      \"example\": \"Geological model\""]
4161#[doc = "    },"]
4162#[doc = "    \"remarks\": {"]
4163#[doc = "      \"description\": \"Additional remarks, if required.\","]
4164#[doc = "      \"type\": \"string\","]
4165#[doc = "      \"example\": \"Some additional remarks\""]
4166#[doc = "    },"]
4167#[doc = "    \"uncertainty\": {"]
4168#[doc = "      \"description\": \"Short statement discussing uncertainty with respect to the information presented in this model.\","]
4169#[doc = "      \"type\": \"string\","]
4170#[doc = "      \"example\": \"The boundaries of the geological units presented in this model are a best estimate based on interpolation between exploratory holes, which in some cases are >100m apart. In addition, in some places the boundaries are based on interpretation of CPT results. Therefore the unit boundaries shown are subject to uncertainty, which increases with distance from the exploratory holes. Refer to GIR section 3.3.4 for more information. \""]
4171#[doc = "    },"]
4172#[doc = "    \"usage\": {"]
4173#[doc = "      \"description\": \"Short description of intended and/or permitted usage including limitations or restrictions. Strongly recommended.\","]
4174#[doc = "      \"type\": \"string\","]
4175#[doc = "      \"example\": \"Observational and interpolated geological profile. For reference and visualisation only. Not suitable for direct use in design. See GIR section 3.3.4 for details.\""]
4176#[doc = "    }"]
4177#[doc = "  },"]
4178#[doc = "  \"additionalProperties\": false"]
4179#[doc = "}"]
4180#[doc = r" ```"]
4181#[doc = r" </details>"]
4182#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4183#[serde(deny_unknown_fields)]
4184pub struct AgsiModel {
4185    #[doc = "Array of embedded agsiModelAlignment objects. Used to define the (section) alignments in this (primary) model object."]
4186    #[serde(
4187        rename = "agsiModelAlignment",
4188        default,
4189        skip_serializing_if = "::std::vec::Vec::is_empty"
4190    )]
4191    pub agsi_model_alignment: ::std::vec::Vec<AgsiModelAlignment>,
4192    #[doc = "Single embedded agsiModelBoundary object."]
4193    #[serde(
4194        rename = "agsiModelBoundary",
4195        default,
4196        skip_serializing_if = "::std::option::Option::is_none"
4197    )]
4198    pub agsi_model_boundary: ::std::option::Option<AgsiModelBoundary>,
4199    #[doc = "Array of embedded agsiModelElement objects."]
4200    #[serde(
4201        rename = "agsiModelElement",
4202        default,
4203        skip_serializing_if = "::std::vec::Vec::is_empty"
4204    )]
4205    pub agsi_model_element: ::std::vec::Vec<AgsiModelElement>,
4206    #[doc = "Array of embedded agsiObservationSet objects."]
4207    #[serde(
4208        rename = "agsiObservationSet",
4209        default,
4210        skip_serializing_if = "::std::vec::Vec::is_empty"
4211    )]
4212    pub agsi_observation_set: ::std::vec::Vec<AgsiObservationSet>,
4213    #[doc = "Reference to ID of an agsiModelAlignment object found in another model. Required by 2D section models to identify the alignment of the section."]
4214    #[serde(
4215        rename = "alignmentID",
4216        default,
4217        skip_serializing_if = "::std::option::Option::is_none"
4218    )]
4219    pub alignment_id: ::std::option::Option<::std::string::String>,
4220    #[doc = "Category of model."]
4221    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4222    pub category: ::std::option::Option<::std::string::String>,
4223    #[doc = "Reference to coordinate system applicable to this model (relevant agsProjectCoordinateSystem object)."]
4224    #[serde(
4225        rename = "coordSystemID",
4226        default,
4227        skip_serializing_if = "::std::option::Option::is_none"
4228    )]
4229    pub coord_system_id: ::std::option::Option<::std::string::String>,
4230    #[doc = "More verbose description of model, if required."]
4231    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4232    pub description: ::std::option::Option<::std::string::String>,
4233    #[doc = "Reference to documentation relating to model (reference to agsProjectDocumentSet object)."]
4234    #[serde(
4235        rename = "documentSetID",
4236        default,
4237        skip_serializing_if = "::std::option::Option::is_none"
4238    )]
4239    pub document_set_id: ::std::option::Option<::std::string::String>,
4240    #[doc = "Domain of model."]
4241    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4242    pub domain: ::std::option::Option<::std::string::String>,
4243    #[doc = "Short description of input data used by model an/or cross reference to document describing this."]
4244    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4245    pub input: ::std::option::Option<::std::string::String>,
4246    #[doc = "Short description of method used to create model, including software used, and/or reference to the document where this is discussed."]
4247    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4248    pub method: ::std::option::Option<::std::string::String>,
4249    #[doc = "Identifier for the model. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for modelID should be unique within the AGSi file. "]
4250    #[serde(
4251        rename = "modelID",
4252        default,
4253        skip_serializing_if = "::std::option::Option::is_none"
4254    )]
4255    pub model_id: ::std::option::Option<::std::string::String>,
4256    #[doc = "Short name of model."]
4257    #[serde(
4258        rename = "modelName",
4259        default,
4260        skip_serializing_if = "::std::option::Option::is_none"
4261    )]
4262    pub model_name: ::std::option::Option<::std::string::String>,
4263    #[doc = "Type of model. Incorporates domain and category of model."]
4264    #[serde(
4265        rename = "modelType",
4266        default,
4267        skip_serializing_if = "::std::option::Option::is_none"
4268    )]
4269    pub model_type: ::std::option::Option<::std::string::String>,
4270    #[doc = "Additional remarks, if required."]
4271    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4272    pub remarks: ::std::option::Option<::std::string::String>,
4273    #[doc = "Short statement discussing uncertainty with respect to the information presented in this model."]
4274    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4275    pub uncertainty: ::std::option::Option<::std::string::String>,
4276    #[doc = "Short description of intended and/or permitted usage including limitations or restrictions. Strongly recommended."]
4277    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4278    pub usage: ::std::option::Option<::std::string::String>,
4279}
4280impl ::std::convert::From<&AgsiModel> for AgsiModel {
4281    fn from(value: &AgsiModel) -> Self {
4282        value.clone()
4283    }
4284}
4285impl ::std::default::Default for AgsiModel {
4286    fn default() -> Self {
4287        Self {
4288            agsi_model_alignment: Default::default(),
4289            agsi_model_boundary: Default::default(),
4290            agsi_model_element: Default::default(),
4291            agsi_observation_set: Default::default(),
4292            alignment_id: Default::default(),
4293            category: Default::default(),
4294            coord_system_id: Default::default(),
4295            description: Default::default(),
4296            document_set_id: Default::default(),
4297            domain: Default::default(),
4298            input: Default::default(),
4299            method: Default::default(),
4300            model_id: Default::default(),
4301            model_name: Default::default(),
4302            model_type: Default::default(),
4303            remarks: Default::default(),
4304            uncertainty: Default::default(),
4305            usage: Default::default(),
4306        }
4307    }
4308}
4309impl AgsiModel {
4310    pub fn builder() -> builder::AgsiModel {
4311        Default::default()
4312    }
4313}
4314#[doc = "An alignment comprises the geometry and metadata defining a line of interest, most commonly used for the line of a section (cross section, fence or profile  - see Guidance for discussion of terminology). Alignments are typically included in a primary 3D model (alternatively a 2D map) but the sections themselves are normally defined as separate models because each 2D section will have its own coordinate system. The alignmentID attribute can be referenced by section models to provide a link to the alignment defined here. Sections must be drawn in the vertical (Z) plane, with alignments defined in the XY plane. The geometry is specified using an embedded agsiGeometryFromFile object referencing an external file."]
4315#[doc = r""]
4316#[doc = r" <details><summary>JSON schema</summary>"]
4317#[doc = r""]
4318#[doc = r" ```json"]
4319#[doc = "{"]
4320#[doc = "  \"description\": \"An alignment comprises the geometry and metadata defining a line of interest, most commonly used for the line of a section (cross section, fence or profile  - see Guidance for discussion of terminology). Alignments are typically included in a primary 3D model (alternatively a 2D map) but the sections themselves are normally defined as separate models because each 2D section will have its own coordinate system. The alignmentID attribute can be referenced by section models to provide a link to the alignment defined here. Sections must be drawn in the vertical (Z) plane, with alignments defined in the XY plane. The geometry is specified using an embedded agsiGeometryFromFile object referencing an external file.\","]
4321#[doc = "  \"type\": \"object\","]
4322#[doc = "  \"properties\": {"]
4323#[doc = "    \"agsiGeometry\": {"]
4324#[doc = "      \"description\": \"An embedded Geometry group object defining the geometry of the  alignment as a 2D line in XY space. This will be an embedded agsiGeometryFromFile object pointing to a line defined in an external file.\","]
4325#[doc = "      \"type\": \"object\","]
4326#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4327#[doc = "    },"]
4328#[doc = "    \"alignmentID\": {"]
4329#[doc = "      \"description\": \"Identifier for the alignment. May be local to this file or a UUID as required/specified. May be referenced by alignmentID attribute of (a different) agsiModel object. Identifiers for alignmentID shall be unique within the AGSi file.\","]
4330#[doc = "      \"type\": \"string\","]
4331#[doc = "      \"example\": \"sectionAA\""]
4332#[doc = "    },"]
4333#[doc = "    \"alignmentName\": {"]
4334#[doc = "      \"description\": \"Name or short description of what this alignment represents.\","]
4335#[doc = "      \"type\": \"string\","]
4336#[doc = "      \"example\": \"Section AA\""]
4337#[doc = "    },"]
4338#[doc = "    \"description\": {"]
4339#[doc = "      \"description\": \"More verbose description, as required.\","]
4340#[doc = "      \"type\": \"string\","]
4341#[doc = "      \"example\": \"East-west section through site\""]
4342#[doc = "    },"]
4343#[doc = "    \"remarks\": {"]
4344#[doc = "      \"description\": \"Additional remarks, if required.\","]
4345#[doc = "      \"type\": \"string\","]
4346#[doc = "      \"example\": \"Some additional remarks\""]
4347#[doc = "    },"]
4348#[doc = "    \"startChainage\": {"]
4349#[doc = "      \"description\": \"The section chainage/baseline distance for the first point defined on the alignment. Assumed to be zero if not used.\","]
4350#[doc = "      \"type\": \"number\","]
4351#[doc = "      \"example\": 1000"]
4352#[doc = "    }"]
4353#[doc = "  },"]
4354#[doc = "  \"additionalProperties\": false"]
4355#[doc = "}"]
4356#[doc = r" ```"]
4357#[doc = r" </details>"]
4358#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4359#[serde(deny_unknown_fields)]
4360pub struct AgsiModelAlignment {
4361    #[doc = "An embedded Geometry group object defining the geometry of the  alignment as a 2D line in XY space. This will be an embedded agsiGeometryFromFile object pointing to a line defined in an external file."]
4362    #[serde(
4363        rename = "agsiGeometry",
4364        default,
4365        skip_serializing_if = "::std::option::Option::is_none"
4366    )]
4367    pub agsi_geometry: ::std::option::Option<AgsiGeometryFromFile>,
4368    #[doc = "Identifier for the alignment. May be local to this file or a UUID as required/specified. May be referenced by alignmentID attribute of (a different) agsiModel object. Identifiers for alignmentID shall be unique within the AGSi file."]
4369    #[serde(
4370        rename = "alignmentID",
4371        default,
4372        skip_serializing_if = "::std::option::Option::is_none"
4373    )]
4374    pub alignment_id: ::std::option::Option<::std::string::String>,
4375    #[doc = "Name or short description of what this alignment represents."]
4376    #[serde(
4377        rename = "alignmentName",
4378        default,
4379        skip_serializing_if = "::std::option::Option::is_none"
4380    )]
4381    pub alignment_name: ::std::option::Option<::std::string::String>,
4382    #[doc = "More verbose description, as required."]
4383    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4384    pub description: ::std::option::Option<::std::string::String>,
4385    #[doc = "Additional remarks, if required."]
4386    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4387    pub remarks: ::std::option::Option<::std::string::String>,
4388    #[serde(
4389        rename = "startChainage",
4390        default,
4391        skip_serializing_if = "::std::option::Option::is_none"
4392    )]
4393    pub start_chainage: ::std::option::Option<f64>,
4394}
4395impl ::std::convert::From<&AgsiModelAlignment> for AgsiModelAlignment {
4396    fn from(value: &AgsiModelAlignment) -> Self {
4397        value.clone()
4398    }
4399}
4400impl ::std::default::Default for AgsiModelAlignment {
4401    fn default() -> Self {
4402        Self {
4403            agsi_geometry: Default::default(),
4404            alignment_id: Default::default(),
4405            alignment_name: Default::default(),
4406            description: Default::default(),
4407            remarks: Default::default(),
4408            start_chainage: Default::default(),
4409        }
4410    }
4411}
4412impl AgsiModelAlignment {
4413    pub fn builder() -> builder::AgsiModelAlignment {
4414        Default::default()
4415    }
4416}
4417#[doc = "An agsiModelBoundary object defines the model boundary, i.e. the maximum extent of the model. Any elements or parts of elements lying outside the boundary are deemed to not be part of the model. Only one boundary per agsiModel is permitted. Only plan boundaries with vertical sides are permitted, defined by either limiting coordinates, or a bounding closed polygon. The top and base may be either a flat plane at a defined elevation, or a surface. Top boundary may not be required, depending on nature of model and/or software/application used (to be confirmed in specification). "]
4418#[doc = r""]
4419#[doc = r" <details><summary>JSON schema</summary>"]
4420#[doc = r""]
4421#[doc = r" ```json"]
4422#[doc = "{"]
4423#[doc = "  \"description\": \"An agsiModelBoundary object defines the model boundary, i.e. the maximum extent of the model. Any elements or parts of elements lying outside the boundary are deemed to not be part of the model. Only one boundary per agsiModel is permitted. Only plan boundaries with vertical sides are permitted, defined by either limiting coordinates, or a bounding closed polygon. The top and base may be either a flat plane at a defined elevation, or a surface. Top boundary may not be required, depending on nature of model and/or software/application used (to be confirmed in specification). \","]
4424#[doc = "  \"type\": \"object\","]
4425#[doc = "  \"properties\": {"]
4426#[doc = "    \"agsiGeometryBoundaryXY\": {"]
4427#[doc = "      \"description\": \"Embedded agsiGeometryFromFile object that provides the geometry of the closed polygon defining the plan extent of model, as an alternative to the box boundary. Use with caution as this may not be supported by all software/applications. Confirm use in specification.\","]
4428#[doc = "      \"type\": \"object\","]
4429#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4430#[doc = "    },"]
4431#[doc = "    \"agsiGeometrySurfaceBottom\": {"]
4432#[doc = "      \"description\": \"Embedded agsiGeometryFromFile object that defines the base of the model, as an alternative to the box boundary. Use with caution as this may not be supported by all software/applications. Confirm use in specification.\","]
4433#[doc = "      \"type\": \"object\","]
4434#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4435#[doc = "    },"]
4436#[doc = "    \"agsiGeometrySurfaceTop\": {"]
4437#[doc = "      \"description\": \"Embedded agsiGeometryFromFile object that defines the top of the model, as an alternative to the box boundary. Use with caution as this may not be supported by all software/applications. May not be required for some software/applications. Confirm use in specification.\","]
4438#[doc = "      \"type\": \"object\","]
4439#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4440#[doc = "    },"]
4441#[doc = "    \"bottomElevation\": {"]
4442#[doc = "      \"description\": \"Elevation (Z) of bottom plane of model for box boundary.\","]
4443#[doc = "      \"type\": \"number\","]
4444#[doc = "      \"example\": -40"]
4445#[doc = "    },"]
4446#[doc = "    \"boundaryID\": {"]
4447#[doc = "      \"description\": \"Identifier for the model boundary. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it.  If used, identifiers for boundaryID should be unique within the AGSi file. \","]
4448#[doc = "      \"type\": \"string\","]
4449#[doc = "      \"example\": \"BoundarySitewide\""]
4450#[doc = "    },"]
4451#[doc = "    \"description\": {"]
4452#[doc = "      \"description\": \"Short description.\","]
4453#[doc = "      \"type\": \"string\","]
4454#[doc = "      \"example\": \"Boundary for Geological Model: sitewide\""]
4455#[doc = "    },"]
4456#[doc = "    \"maxX\": {"]
4457#[doc = "      \"description\": \"Maximum X for box boundary.\","]
4458#[doc = "      \"type\": \"number\","]
4459#[doc = "      \"example\": 35000"]
4460#[doc = "    },"]
4461#[doc = "    \"maxY\": {"]
4462#[doc = "      \"description\": \"Maximum Y for box boundary.\","]
4463#[doc = "      \"type\": \"number\","]
4464#[doc = "      \"example\": 15000"]
4465#[doc = "    },"]
4466#[doc = "    \"minX\": {"]
4467#[doc = "      \"description\": \"Minimum X for box boundary.\","]
4468#[doc = "      \"type\": \"number\","]
4469#[doc = "      \"example\": 20000"]
4470#[doc = "    },"]
4471#[doc = "    \"minY\": {"]
4472#[doc = "      \"description\": \"Minimum Y for box boundary.\","]
4473#[doc = "      \"type\": \"number\","]
4474#[doc = "      \"example\": 10000"]
4475#[doc = "    },"]
4476#[doc = "    \"remarks\": {"]
4477#[doc = "      \"description\": \"Additional remarks, if required.\","]
4478#[doc = "      \"type\": \"string\","]
4479#[doc = "      \"example\": \"Some additional remarks\""]
4480#[doc = "    },"]
4481#[doc = "    \"topElevation\": {"]
4482#[doc = "      \"description\": \"Elevation (Z) of top plane of model for box boundary.\","]
4483#[doc = "      \"type\": \"number\","]
4484#[doc = "      \"example\": 40"]
4485#[doc = "    }"]
4486#[doc = "  },"]
4487#[doc = "  \"additionalProperties\": false"]
4488#[doc = "}"]
4489#[doc = r" ```"]
4490#[doc = r" </details>"]
4491#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4492#[serde(deny_unknown_fields)]
4493pub struct AgsiModelBoundary {
4494    #[doc = "Embedded agsiGeometryFromFile object that provides the geometry of the closed polygon defining the plan extent of model, as an alternative to the box boundary. Use with caution as this may not be supported by all software/applications. Confirm use in specification."]
4495    #[serde(
4496        rename = "agsiGeometryBoundaryXY",
4497        default,
4498        skip_serializing_if = "::std::option::Option::is_none"
4499    )]
4500    pub agsi_geometry_boundary_xy: ::std::option::Option<AgsiGeometryFromFile>,
4501    #[doc = "Embedded agsiGeometryFromFile object that defines the base of the model, as an alternative to the box boundary. Use with caution as this may not be supported by all software/applications. Confirm use in specification."]
4502    #[serde(
4503        rename = "agsiGeometrySurfaceBottom",
4504        default,
4505        skip_serializing_if = "::std::option::Option::is_none"
4506    )]
4507    pub agsi_geometry_surface_bottom: ::std::option::Option<AgsiGeometryFromFile>,
4508    #[doc = "Embedded agsiGeometryFromFile object that defines the top of the model, as an alternative to the box boundary. Use with caution as this may not be supported by all software/applications. May not be required for some software/applications. Confirm use in specification."]
4509    #[serde(
4510        rename = "agsiGeometrySurfaceTop",
4511        default,
4512        skip_serializing_if = "::std::option::Option::is_none"
4513    )]
4514    pub agsi_geometry_surface_top: ::std::option::Option<AgsiGeometryFromFile>,
4515    #[serde(
4516        rename = "bottomElevation",
4517        default,
4518        skip_serializing_if = "::std::option::Option::is_none"
4519    )]
4520    pub bottom_elevation: ::std::option::Option<f64>,
4521    #[doc = "Identifier for the model boundary. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it.  If used, identifiers for boundaryID should be unique within the AGSi file. "]
4522    #[serde(
4523        rename = "boundaryID",
4524        default,
4525        skip_serializing_if = "::std::option::Option::is_none"
4526    )]
4527    pub boundary_id: ::std::option::Option<::std::string::String>,
4528    #[doc = "Short description."]
4529    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4530    pub description: ::std::option::Option<::std::string::String>,
4531    #[serde(
4532        rename = "maxX",
4533        default,
4534        skip_serializing_if = "::std::option::Option::is_none"
4535    )]
4536    pub max_x: ::std::option::Option<f64>,
4537    #[serde(
4538        rename = "maxY",
4539        default,
4540        skip_serializing_if = "::std::option::Option::is_none"
4541    )]
4542    pub max_y: ::std::option::Option<f64>,
4543    #[serde(
4544        rename = "minX",
4545        default,
4546        skip_serializing_if = "::std::option::Option::is_none"
4547    )]
4548    pub min_x: ::std::option::Option<f64>,
4549    #[serde(
4550        rename = "minY",
4551        default,
4552        skip_serializing_if = "::std::option::Option::is_none"
4553    )]
4554    pub min_y: ::std::option::Option<f64>,
4555    #[doc = "Additional remarks, if required."]
4556    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4557    pub remarks: ::std::option::Option<::std::string::String>,
4558    #[serde(
4559        rename = "topElevation",
4560        default,
4561        skip_serializing_if = "::std::option::Option::is_none"
4562    )]
4563    pub top_elevation: ::std::option::Option<f64>,
4564}
4565impl ::std::convert::From<&AgsiModelBoundary> for AgsiModelBoundary {
4566    fn from(value: &AgsiModelBoundary) -> Self {
4567        value.clone()
4568    }
4569}
4570impl ::std::default::Default for AgsiModelBoundary {
4571    fn default() -> Self {
4572        Self {
4573            agsi_geometry_boundary_xy: Default::default(),
4574            agsi_geometry_surface_bottom: Default::default(),
4575            agsi_geometry_surface_top: Default::default(),
4576            bottom_elevation: Default::default(),
4577            boundary_id: Default::default(),
4578            description: Default::default(),
4579            max_x: Default::default(),
4580            max_y: Default::default(),
4581            min_x: Default::default(),
4582            min_y: Default::default(),
4583            remarks: Default::default(),
4584            top_elevation: Default::default(),
4585        }
4586    }
4587}
4588impl AgsiModelBoundary {
4589    pub fn builder() -> builder::AgsiModelBoundary {
4590        Default::default()
4591    }
4592}
4593#[doc = "A model is made up of elements. These elements are defined by agsiModelElement objects. Each element will have embedded geometry. Which class of object is referenced will depend on the form of geometry required. Elements may also have embedded data (properties and parameters)."]
4594#[doc = r""]
4595#[doc = r" <details><summary>JSON schema</summary>"]
4596#[doc = r""]
4597#[doc = r" ```json"]
4598#[doc = "{"]
4599#[doc = "  \"description\": \"A model is made up of elements. These elements are defined by agsiModelElement objects. Each element will have embedded geometry. Which class of object is referenced will depend on the form of geometry required. Elements may also have embedded data (properties and parameters).\","]
4600#[doc = "  \"type\": \"object\","]
4601#[doc = "  \"properties\": {"]
4602#[doc = "    \"agsiDataParameterValue\": {"]
4603#[doc = "      \"description\": \"Array of embedded agsiDataParameterValue objects providing parameter data specific to this model element.\","]
4604#[doc = "      \"type\": \"array\","]
4605#[doc = "      \"items\": {"]
4606#[doc = "        \"$ref\": \"#/$defs/agsiDataParameterValue\""]
4607#[doc = "      }"]
4608#[doc = "    },"]
4609#[doc = "    \"agsiDataPropertyFromFile\": {"]
4610#[doc = "      \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file.\","]
4611#[doc = "      \"type\": \"object\","]
4612#[doc = "      \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
4613#[doc = "    },"]
4614#[doc = "    \"agsiDataPropertySummary\": {"]
4615#[doc = "      \"description\": \"Array of embedded agsiDataPropertySummary objects providing summaries of property data specific to this model element.\","]
4616#[doc = "      \"type\": \"array\","]
4617#[doc = "      \"items\": {"]
4618#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertySummary\""]
4619#[doc = "      }"]
4620#[doc = "    },"]
4621#[doc = "    \"agsiDataPropertyValue\": {"]
4622#[doc = "      \"description\": \"Array of embedded agsiDataPropertyValue objects providing discrete property data specific to this model element.\","]
4623#[doc = "      \"type\": \"array\","]
4624#[doc = "      \"items\": {"]
4625#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
4626#[doc = "      }"]
4627#[doc = "    },"]
4628#[doc = "    \"agsiGeometry\": {"]
4629#[doc = "      \"description\": \"An embedded Geometry group object defining the geometry for this element. The object type referenced will depend on the type of geometry, which should be defined in geometryObject. Only one object per element allowed.\","]
4630#[doc = "      \"type\": \"object\","]
4631#[doc = "      \"anyOf\": ["]
4632#[doc = "        {"]
4633#[doc = "          \"$ref\": \"#/$defs/agsiGeometryVolFromSurfaces\""]
4634#[doc = "        },"]
4635#[doc = "        {"]
4636#[doc = "          \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4637#[doc = "        },"]
4638#[doc = "        {"]
4639#[doc = "          \"$ref\": \"#/$defs/agsiGeometryAreaFromLines\""]
4640#[doc = "        },"]
4641#[doc = "        {"]
4642#[doc = "          \"$ref\": \"#/$defs/agsiGeometryPlane\""]
4643#[doc = "        },"]
4644#[doc = "        {"]
4645#[doc = "          \"$ref\": \"#/$defs/agsiGeometryLayer\""]
4646#[doc = "        }"]
4647#[doc = "      ]"]
4648#[doc = "    },"]
4649#[doc = "    \"agsiGeometryAreaLimit\": {"]
4650#[doc = "      \"description\": \"If required, an embedded agsiGeometryFromFile object defining the limiting plan area for the element may be defined by reference to a closed polygon object. The polygon acts as a 'cookie cutter' so the element boundary will be curtailed to stay within the polygon. Geometry beyond the boundary is ignored. This allows a large element to be easily divided up into parts, e.g. to allow different properties or parameters to be reported for each part. Use with caution as it may not be supported by all software/applications. Confirm usage in specification. Only one object per element allowed.\","]
4651#[doc = "      \"type\": \"object\","]
4652#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4653#[doc = "    },"]
4654#[doc = "    \"colourRGB\": {"]
4655#[doc = "      \"description\": \"Preferred display colour (RGB hexadecimal)\","]
4656#[doc = "      \"type\": \"string\","]
4657#[doc = "      \"example\": \"#c0c0c0\""]
4658#[doc = "    },"]
4659#[doc = "    \"description\": {"]
4660#[doc = "      \"description\": \"More verbose description, as required. Usage may be determined by type of element, e.g. for a geological unit this could be used to describe typical lithology.\","]
4661#[doc = "      \"type\": \"string\","]
4662#[doc = "      \"example\": \"Stiff to very stiff slightly sandy blue/grey CLAY, with occasional claystone layers (typically <0.1m). Becoming very sandy towards base of unit.\""]
4663#[doc = "    },"]
4664#[doc = "    \"elementID\": {"]
4665#[doc = "      \"description\": \"Identifier for the model element. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for elementID should be unique within the AGSi file. \","]
4666#[doc = "      \"type\": \"string\","]
4667#[doc = "      \"example\": \"GC/W\""]
4668#[doc = "    },"]
4669#[doc = "    \"elementName\": {"]
4670#[doc = "      \"description\": \"Name or short description of what this element represents.\","]
4671#[doc = "      \"type\": \"string\","]
4672#[doc = "      \"example\": \"Gotham Clay, west zone\""]
4673#[doc = "    },"]
4674#[doc = "    \"elementType\": {"]
4675#[doc = "      \"description\": \"Type of element, i.e. what the element represents in general terms.\","]
4676#[doc = "      \"type\": \"string\","]
4677#[doc = "      \"example\": \"Geological unit\""]
4678#[doc = "    },"]
4679#[doc = "    \"geometryObject\": {"]
4680#[doc = "      \"description\": \"Object type (from Geometry group) embedded in agsiGeometry attribute.\","]
4681#[doc = "      \"type\": \"string\","]
4682#[doc = "      \"example\": \"agsiGeometryVolFromSurfaces\""]
4683#[doc = "    },"]
4684#[doc = "    \"remarks\": {"]
4685#[doc = "      \"description\": \"Additional remarks, if required.\","]
4686#[doc = "      \"type\": \"string\","]
4687#[doc = "      \"example\": \"Some additional remarks\""]
4688#[doc = "    }"]
4689#[doc = "  },"]
4690#[doc = "  \"additionalProperties\": false"]
4691#[doc = "}"]
4692#[doc = r" ```"]
4693#[doc = r" </details>"]
4694#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4695#[serde(deny_unknown_fields)]
4696pub struct AgsiModelElement {
4697    #[doc = "Array of embedded agsiDataParameterValue objects providing parameter data specific to this model element."]
4698    #[serde(
4699        rename = "agsiDataParameterValue",
4700        default,
4701        skip_serializing_if = "::std::vec::Vec::is_empty"
4702    )]
4703    pub agsi_data_parameter_value: ::std::vec::Vec<AgsiDataParameterValue>,
4704    #[doc = "An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file."]
4705    #[serde(
4706        rename = "agsiDataPropertyFromFile",
4707        default,
4708        skip_serializing_if = "::std::option::Option::is_none"
4709    )]
4710    pub agsi_data_property_from_file: ::std::option::Option<AgsiDataPropertyFromFile>,
4711    #[doc = "Array of embedded agsiDataPropertySummary objects providing summaries of property data specific to this model element."]
4712    #[serde(
4713        rename = "agsiDataPropertySummary",
4714        default,
4715        skip_serializing_if = "::std::vec::Vec::is_empty"
4716    )]
4717    pub agsi_data_property_summary: ::std::vec::Vec<AgsiDataPropertySummary>,
4718    #[doc = "Array of embedded agsiDataPropertyValue objects providing discrete property data specific to this model element."]
4719    #[serde(
4720        rename = "agsiDataPropertyValue",
4721        default,
4722        skip_serializing_if = "::std::vec::Vec::is_empty"
4723    )]
4724    pub agsi_data_property_value: ::std::vec::Vec<AgsiDataPropertyValue>,
4725    #[doc = "An embedded Geometry group object defining the geometry for this element. The object type referenced will depend on the type of geometry, which should be defined in geometryObject. Only one object per element allowed."]
4726    #[serde(
4727        rename = "agsiGeometry",
4728        default,
4729        skip_serializing_if = "::std::option::Option::is_none"
4730    )]
4731    pub agsi_geometry: ::std::option::Option<AgsiModelElementAgsiGeometry>,
4732    #[doc = "If required, an embedded agsiGeometryFromFile object defining the limiting plan area for the element may be defined by reference to a closed polygon object. The polygon acts as a 'cookie cutter' so the element boundary will be curtailed to stay within the polygon. Geometry beyond the boundary is ignored. This allows a large element to be easily divided up into parts, e.g. to allow different properties or parameters to be reported for each part. Use with caution as it may not be supported by all software/applications. Confirm usage in specification. Only one object per element allowed."]
4733    #[serde(
4734        rename = "agsiGeometryAreaLimit",
4735        default,
4736        skip_serializing_if = "::std::option::Option::is_none"
4737    )]
4738    pub agsi_geometry_area_limit: ::std::option::Option<AgsiGeometryFromFile>,
4739    #[doc = "Preferred display colour (RGB hexadecimal)"]
4740    #[serde(
4741        rename = "colourRGB",
4742        default,
4743        skip_serializing_if = "::std::option::Option::is_none"
4744    )]
4745    pub colour_rgb: ::std::option::Option<::std::string::String>,
4746    #[doc = "More verbose description, as required. Usage may be determined by type of element, e.g. for a geological unit this could be used to describe typical lithology."]
4747    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4748    pub description: ::std::option::Option<::std::string::String>,
4749    #[doc = "Identifier for the model element. May be local to this file or a UUID as required/specified. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for elementID should be unique within the AGSi file. "]
4750    #[serde(
4751        rename = "elementID",
4752        default,
4753        skip_serializing_if = "::std::option::Option::is_none"
4754    )]
4755    pub element_id: ::std::option::Option<::std::string::String>,
4756    #[doc = "Name or short description of what this element represents."]
4757    #[serde(
4758        rename = "elementName",
4759        default,
4760        skip_serializing_if = "::std::option::Option::is_none"
4761    )]
4762    pub element_name: ::std::option::Option<::std::string::String>,
4763    #[doc = "Type of element, i.e. what the element represents in general terms."]
4764    #[serde(
4765        rename = "elementType",
4766        default,
4767        skip_serializing_if = "::std::option::Option::is_none"
4768    )]
4769    pub element_type: ::std::option::Option<::std::string::String>,
4770    #[doc = "Object type (from Geometry group) embedded in agsiGeometry attribute."]
4771    #[serde(
4772        rename = "geometryObject",
4773        default,
4774        skip_serializing_if = "::std::option::Option::is_none"
4775    )]
4776    pub geometry_object: ::std::option::Option<::std::string::String>,
4777    #[doc = "Additional remarks, if required."]
4778    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
4779    pub remarks: ::std::option::Option<::std::string::String>,
4780}
4781impl ::std::convert::From<&AgsiModelElement> for AgsiModelElement {
4782    fn from(value: &AgsiModelElement) -> Self {
4783        value.clone()
4784    }
4785}
4786impl ::std::default::Default for AgsiModelElement {
4787    fn default() -> Self {
4788        Self {
4789            agsi_data_parameter_value: Default::default(),
4790            agsi_data_property_from_file: Default::default(),
4791            agsi_data_property_summary: Default::default(),
4792            agsi_data_property_value: Default::default(),
4793            agsi_geometry: Default::default(),
4794            agsi_geometry_area_limit: Default::default(),
4795            colour_rgb: Default::default(),
4796            description: Default::default(),
4797            element_id: Default::default(),
4798            element_name: Default::default(),
4799            element_type: Default::default(),
4800            geometry_object: Default::default(),
4801            remarks: Default::default(),
4802        }
4803    }
4804}
4805impl AgsiModelElement {
4806    pub fn builder() -> builder::AgsiModelElement {
4807        Default::default()
4808    }
4809}
4810#[doc = "An embedded Geometry group object defining the geometry for this element. The object type referenced will depend on the type of geometry, which should be defined in geometryObject. Only one object per element allowed."]
4811#[doc = r""]
4812#[doc = r" <details><summary>JSON schema</summary>"]
4813#[doc = r""]
4814#[doc = r" ```json"]
4815#[doc = "{"]
4816#[doc = "  \"description\": \"An embedded Geometry group object defining the geometry for this element. The object type referenced will depend on the type of geometry, which should be defined in geometryObject. Only one object per element allowed.\","]
4817#[doc = "  \"type\": \"object\","]
4818#[doc = "  \"anyOf\": ["]
4819#[doc = "    {"]
4820#[doc = "      \"$ref\": \"#/$defs/agsiGeometryVolFromSurfaces\""]
4821#[doc = "    },"]
4822#[doc = "    {"]
4823#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
4824#[doc = "    },"]
4825#[doc = "    {"]
4826#[doc = "      \"$ref\": \"#/$defs/agsiGeometryAreaFromLines\""]
4827#[doc = "    },"]
4828#[doc = "    {"]
4829#[doc = "      \"$ref\": \"#/$defs/agsiGeometryPlane\""]
4830#[doc = "    },"]
4831#[doc = "    {"]
4832#[doc = "      \"$ref\": \"#/$defs/agsiGeometryLayer\""]
4833#[doc = "    }"]
4834#[doc = "  ]"]
4835#[doc = "}"]
4836#[doc = r" ```"]
4837#[doc = r" </details>"]
4838#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4839pub struct AgsiModelElementAgsiGeometry {
4840    #[serde(
4841        flatten,
4842        default,
4843        skip_serializing_if = "::std::option::Option::is_none"
4844    )]
4845    pub subtype_0: ::std::option::Option<AgsiGeometryVolFromSurfaces>,
4846    #[serde(
4847        flatten,
4848        default,
4849        skip_serializing_if = "::std::option::Option::is_none"
4850    )]
4851    pub subtype_1: ::std::option::Option<AgsiGeometryFromFile>,
4852    #[serde(
4853        flatten,
4854        default,
4855        skip_serializing_if = "::std::option::Option::is_none"
4856    )]
4857    pub subtype_2: ::std::option::Option<AgsiGeometryAreaFromLines>,
4858    #[serde(
4859        flatten,
4860        default,
4861        skip_serializing_if = "::std::option::Option::is_none"
4862    )]
4863    pub subtype_3: ::std::option::Option<AgsiGeometryPlane>,
4864    #[serde(
4865        flatten,
4866        default,
4867        skip_serializing_if = "::std::option::Option::is_none"
4868    )]
4869    pub subtype_4: ::std::option::Option<AgsiGeometryLayer>,
4870}
4871impl ::std::convert::From<&AgsiModelElementAgsiGeometry> for AgsiModelElementAgsiGeometry {
4872    fn from(value: &AgsiModelElementAgsiGeometry) -> Self {
4873        value.clone()
4874    }
4875}
4876impl ::std::default::Default for AgsiModelElementAgsiGeometry {
4877    fn default() -> Self {
4878        Self {
4879            subtype_0: Default::default(),
4880            subtype_1: Default::default(),
4881            subtype_2: Default::default(),
4882            subtype_3: Default::default(),
4883            subtype_4: Default::default(),
4884        }
4885    }
4886}
4887impl AgsiModelElementAgsiGeometry {
4888    pub fn builder() -> builder::AgsiModelElementAgsiGeometry {
4889        Default::default()
4890    }
4891}
4892#[doc = "An agsiObservationColumn object provides the data for a single column segment within an exporatory hole, i.e. value/text over a defined range of depth/elevation. Typically used for geological logging descriptions and attributes are included to facilitate this. May alternatively be used with embedded agsiDataPropertyValue objects for other column segment data. Segments may be defined using depth (relative to top of parent hole) or elevation, or both."]
4893#[doc = r""]
4894#[doc = r" <details><summary>JSON schema</summary>"]
4895#[doc = r""]
4896#[doc = r" ```json"]
4897#[doc = "{"]
4898#[doc = "  \"description\": \"An agsiObservationColumn object provides the data for a single column segment within an exporatory hole, i.e. value/text over a defined range of depth/elevation. Typically used for geological logging descriptions and attributes are included to facilitate this. May alternatively be used with embedded agsiDataPropertyValue objects for other column segment data. Segments may be defined using depth (relative to top of parent hole) or elevation, or both.\","]
4899#[doc = "  \"type\": \"object\","]
4900#[doc = "  \"anyOf\": ["]
4901#[doc = "    {"]
4902#[doc = "      \"required\": ["]
4903#[doc = "        \"topDepth\""]
4904#[doc = "      ]"]
4905#[doc = "    },"]
4906#[doc = "    {"]
4907#[doc = "      \"required\": ["]
4908#[doc = "        \"topElevation\""]
4909#[doc = "      ]"]
4910#[doc = "    }"]
4911#[doc = "  ],"]
4912#[doc = "  \"properties\": {"]
4913#[doc = "    \"agsiDataPropertyValue\": {"]
4914#[doc = "      \"description\": \"Array of embedded agsiDataPropertyValue objects. May be used to provide other data for this range of depth/elevation.\","]
4915#[doc = "      \"type\": \"array\","]
4916#[doc = "      \"items\": {"]
4917#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
4918#[doc = "      }"]
4919#[doc = "    },"]
4920#[doc = "    \"bottomDepth\": {"]
4921#[doc = "      \"description\": \"Depth from top of parent exploratory hole to the bottom of the column segment. For inclined holes defined using a profile, this shall be the length measured along the line of the hole, not adjusted vertical depth.\","]
4922#[doc = "      \"type\": \"number\","]
4923#[doc = "      \"example\": 34.7"]
4924#[doc = "    },"]
4925#[doc = "    \"bottomElevation\": {"]
4926#[doc = "      \"description\": \"Elevation of the bottom of the column segment. For inclined holes, this shall be the true calculated elevation.\","]
4927#[doc = "      \"type\": \"number\","]
4928#[doc = "      \"example\": -28.4"]
4929#[doc = "    },"]
4930#[doc = "    \"columnID\": {"]
4931#[doc = "      \"description\": \"Identifier for this particular column observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it.\","]
4932#[doc = "      \"type\": \"string\","]
4933#[doc = "      \"example\": \"8526ef28-7a26-4c6f-b305-5e9607a7ab6d\""]
4934#[doc = "    },"]
4935#[doc = "    \"description\": {"]
4936#[doc = "      \"description\": \"Geological description.\","]
4937#[doc = "      \"type\": \"string\","]
4938#[doc = "      \"example\": \"Stiff to very stiff blue grey slightly sandy silty CLAY with rare claystone layers (GOTHAM CLAY)\""]
4939#[doc = "    },"]
4940#[doc = "    \"geologyBGS\": {"]
4941#[doc = "      \"description\": \"BGS Lexicon code (applicable in UK only).\","]
4942#[doc = "      \"type\": \"string\","]
4943#[doc = "      \"example\": \"GC\""]
4944#[doc = "    },"]
4945#[doc = "    \"geologyCode\": {"]
4946#[doc = "      \"description\": \"Geology code. Typically a project specific code defined defined using agsProjectCode.\","]
4947#[doc = "      \"type\": \"string\","]
4948#[doc = "      \"example\": \"GC\""]
4949#[doc = "    },"]
4950#[doc = "    \"geologyCode2\": {"]
4951#[doc = "      \"description\": \"2nd geology code, if applicable. Typically a project specific code defined using agsProjectCode.\","]
4952#[doc = "      \"type\": \"string\","]
4953#[doc = "      \"example\": \"A2\""]
4954#[doc = "    },"]
4955#[doc = "    \"geologyFormation\": {"]
4956#[doc = "      \"description\": \"Geological formation or stratum name.\","]
4957#[doc = "      \"type\": \"string\","]
4958#[doc = "      \"example\": \"Gotham Clay\""]
4959#[doc = "    },"]
4960#[doc = "    \"legendCode\": {"]
4961#[doc = "      \"description\": \"Legend code. Recommend using code from AGS format ABBR code list.\","]
4962#[doc = "      \"type\": \"string\","]
4963#[doc = "      \"example\": \"201\""]
4964#[doc = "    },"]
4965#[doc = "    \"remarks\": {"]
4966#[doc = "      \"description\": \"Additional remarks, if required.\","]
4967#[doc = "      \"type\": \"string\","]
4968#[doc = "      \"example\": \"Some remarks if required\""]
4969#[doc = "    },"]
4970#[doc = "    \"topDepth\": {"]
4971#[doc = "      \"description\": \"Depth from top of parent exploratory hole to the top of the column segment. For inclined holes defined using a profile, this shall be the length measured along the line of the hole, not adjusted vertical depth.\","]
4972#[doc = "      \"type\": \"number\","]
4973#[doc = "      \"example\": 8.9"]
4974#[doc = "    },"]
4975#[doc = "    \"topElevation\": {"]
4976#[doc = "      \"description\": \"Elevation of the top of the column segment. For inclined holes, this shall be the true calculated elevation.\","]
4977#[doc = "      \"type\": \"number\","]
4978#[doc = "      \"example\": 6.3"]
4979#[doc = "    }"]
4980#[doc = "  },"]
4981#[doc = "  \"additionalProperties\": false"]
4982#[doc = "}"]
4983#[doc = r" ```"]
4984#[doc = r" </details>"]
4985#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
4986#[serde(untagged, deny_unknown_fields)]
4987pub enum AgsiObservationColumn {
4988    Variant0 {
4989        #[doc = "Array of embedded agsiDataPropertyValue objects. May be used to provide other data for this range of depth/elevation."]
4990        #[serde(
4991            rename = "agsiDataPropertyValue",
4992            default,
4993            skip_serializing_if = "::std::vec::Vec::is_empty"
4994        )]
4995        agsi_data_property_value: ::std::vec::Vec<AgsiDataPropertyValue>,
4996        #[serde(
4997            rename = "bottomDepth",
4998            default,
4999            skip_serializing_if = "::std::option::Option::is_none"
5000        )]
5001        bottom_depth: ::std::option::Option<f64>,
5002        #[serde(
5003            rename = "bottomElevation",
5004            default,
5005            skip_serializing_if = "::std::option::Option::is_none"
5006        )]
5007        bottom_elevation: ::std::option::Option<f64>,
5008        #[doc = "Identifier for this particular column observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it."]
5009        #[serde(
5010            rename = "columnID",
5011            default,
5012            skip_serializing_if = "::std::option::Option::is_none"
5013        )]
5014        column_id: ::std::option::Option<::std::string::String>,
5015        #[doc = "Geological description."]
5016        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5017        description: ::std::option::Option<::std::string::String>,
5018        #[doc = "BGS Lexicon code (applicable in UK only)."]
5019        #[serde(
5020            rename = "geologyBGS",
5021            default,
5022            skip_serializing_if = "::std::option::Option::is_none"
5023        )]
5024        geology_bgs: ::std::option::Option<::std::string::String>,
5025        #[doc = "Geology code. Typically a project specific code defined defined using agsProjectCode."]
5026        #[serde(
5027            rename = "geologyCode",
5028            default,
5029            skip_serializing_if = "::std::option::Option::is_none"
5030        )]
5031        geology_code: ::std::option::Option<::std::string::String>,
5032        #[doc = "2nd geology code, if applicable. Typically a project specific code defined using agsProjectCode."]
5033        #[serde(
5034            rename = "geologyCode2",
5035            default,
5036            skip_serializing_if = "::std::option::Option::is_none"
5037        )]
5038        geology_code2: ::std::option::Option<::std::string::String>,
5039        #[doc = "Geological formation or stratum name."]
5040        #[serde(
5041            rename = "geologyFormation",
5042            default,
5043            skip_serializing_if = "::std::option::Option::is_none"
5044        )]
5045        geology_formation: ::std::option::Option<::std::string::String>,
5046        #[doc = "Legend code. Recommend using code from AGS format ABBR code list."]
5047        #[serde(
5048            rename = "legendCode",
5049            default,
5050            skip_serializing_if = "::std::option::Option::is_none"
5051        )]
5052        legend_code: ::std::option::Option<::std::string::String>,
5053        #[doc = "Additional remarks, if required."]
5054        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5055        remarks: ::std::option::Option<::std::string::String>,
5056        #[serde(rename = "topDepth")]
5057        top_depth: f64,
5058    },
5059    Variant1 {
5060        #[doc = "Array of embedded agsiDataPropertyValue objects. May be used to provide other data for this range of depth/elevation."]
5061        #[serde(
5062            rename = "agsiDataPropertyValue",
5063            default,
5064            skip_serializing_if = "::std::vec::Vec::is_empty"
5065        )]
5066        agsi_data_property_value: ::std::vec::Vec<AgsiDataPropertyValue>,
5067        #[serde(
5068            rename = "bottomDepth",
5069            default,
5070            skip_serializing_if = "::std::option::Option::is_none"
5071        )]
5072        bottom_depth: ::std::option::Option<f64>,
5073        #[serde(
5074            rename = "bottomElevation",
5075            default,
5076            skip_serializing_if = "::std::option::Option::is_none"
5077        )]
5078        bottom_elevation: ::std::option::Option<f64>,
5079        #[doc = "Identifier for this particular column observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it."]
5080        #[serde(
5081            rename = "columnID",
5082            default,
5083            skip_serializing_if = "::std::option::Option::is_none"
5084        )]
5085        column_id: ::std::option::Option<::std::string::String>,
5086        #[doc = "Geological description."]
5087        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5088        description: ::std::option::Option<::std::string::String>,
5089        #[doc = "BGS Lexicon code (applicable in UK only)."]
5090        #[serde(
5091            rename = "geologyBGS",
5092            default,
5093            skip_serializing_if = "::std::option::Option::is_none"
5094        )]
5095        geology_bgs: ::std::option::Option<::std::string::String>,
5096        #[doc = "Geology code. Typically a project specific code defined defined using agsProjectCode."]
5097        #[serde(
5098            rename = "geologyCode",
5099            default,
5100            skip_serializing_if = "::std::option::Option::is_none"
5101        )]
5102        geology_code: ::std::option::Option<::std::string::String>,
5103        #[doc = "2nd geology code, if applicable. Typically a project specific code defined using agsProjectCode."]
5104        #[serde(
5105            rename = "geologyCode2",
5106            default,
5107            skip_serializing_if = "::std::option::Option::is_none"
5108        )]
5109        geology_code2: ::std::option::Option<::std::string::String>,
5110        #[doc = "Geological formation or stratum name."]
5111        #[serde(
5112            rename = "geologyFormation",
5113            default,
5114            skip_serializing_if = "::std::option::Option::is_none"
5115        )]
5116        geology_formation: ::std::option::Option<::std::string::String>,
5117        #[doc = "Legend code. Recommend using code from AGS format ABBR code list."]
5118        #[serde(
5119            rename = "legendCode",
5120            default,
5121            skip_serializing_if = "::std::option::Option::is_none"
5122        )]
5123        legend_code: ::std::option::Option<::std::string::String>,
5124        #[doc = "Additional remarks, if required."]
5125        #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5126        remarks: ::std::option::Option<::std::string::String>,
5127        #[serde(rename = "topElevation")]
5128        top_elevation: f64,
5129    },
5130}
5131impl ::std::convert::From<&Self> for AgsiObservationColumn {
5132    fn from(value: &AgsiObservationColumn) -> Self {
5133        value.clone()
5134    }
5135}
5136#[doc = "An agsiObservationExpHole object provides geometry and common metadata for a single exploratory hole (borehole, trial pit, CPT etc.). Further data can be provided using embedded agsiDataPropertyValue objects if required. Embedded agsiObservationColumn objects may be used to provide a representation of the geology encountered in hole. A link to a supporting data file can be provided using an embedded agsiDataPropertyFromFile object. "]
5137#[doc = r""]
5138#[doc = r" <details><summary>JSON schema</summary>"]
5139#[doc = r""]
5140#[doc = r" ```json"]
5141#[doc = "{"]
5142#[doc = "  \"description\": \"An agsiObservationExpHole object provides geometry and common metadata for a single exploratory hole (borehole, trial pit, CPT etc.). Further data can be provided using embedded agsiDataPropertyValue objects if required. Embedded agsiObservationColumn objects may be used to provide a representation of the geology encountered in hole. A link to a supporting data file can be provided using an embedded agsiDataPropertyFromFile object. \","]
5143#[doc = "  \"type\": \"object\","]
5144#[doc = "  \"anyOf\": ["]
5145#[doc = "    {"]
5146#[doc = "      \"required\": ["]
5147#[doc = "        \"holeID\","]
5148#[doc = "        \"topCoordinate\","]
5149#[doc = "        \"verticalHoleDepth\""]
5150#[doc = "      ]"]
5151#[doc = "    },"]
5152#[doc = "    {"]
5153#[doc = "      \"required\": ["]
5154#[doc = "        \"holeID\","]
5155#[doc = "        \"profileCoordinates\""]
5156#[doc = "      ]"]
5157#[doc = "    }"]
5158#[doc = "  ],"]
5159#[doc = "  \"properties\": {"]
5160#[doc = "    \"agsiDataPropertyFromFile\": {"]
5161#[doc = "      \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference an external supporting data file.\","]
5162#[doc = "      \"type\": \"object\","]
5163#[doc = "      \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
5164#[doc = "    },"]
5165#[doc = "    \"agsiDataPropertyValue\": {"]
5166#[doc = "      \"description\": \"Array of embedded agsiDataPropertyValue objects. May be used for additional hole metadata or for profiles of test results for this hole, e.g. SPT vs depth/elevation.\","]
5167#[doc = "      \"type\": \"array\","]
5168#[doc = "      \"items\": {"]
5169#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
5170#[doc = "      }"]
5171#[doc = "    },"]
5172#[doc = "    \"agsiObservationColumn\": {"]
5173#[doc = "      \"description\": \"Array of embedded agsiObservationColumn objects which are typically used to represent geology within the hole, but can also be used for other data. \","]
5174#[doc = "      \"type\": \"array\","]
5175#[doc = "      \"items\": {"]
5176#[doc = "        \"$ref\": \"#/$defs/agsiObservationColumn\""]
5177#[doc = "      }"]
5178#[doc = "    },"]
5179#[doc = "    \"date\": {"]
5180#[doc = "      \"description\": \"Date of exploration. Recommend using start date for holes that take more than one day.\","]
5181#[doc = "      \"type\": \"string\","]
5182#[doc = "      \"format\": \"date\","]
5183#[doc = "      \"example\": \"2018-05-23\""]
5184#[doc = "    },"]
5185#[doc = "    \"holeID\": {"]
5186#[doc = "      \"description\": \"Identifier that is unique across the project for exploratory holes. Not necessarily the same as the original hole ID (see holeName). If used, identifiers for holeID should be unique within the AGSi file. \","]
5187#[doc = "      \"type\": \"string\","]
5188#[doc = "      \"example\": \"A/BH01\""]
5189#[doc = "    },"]
5190#[doc = "    \"holeName\": {"]
5191#[doc = "      \"description\": \"Current name or ID of the exploratory hole for general use.\","]
5192#[doc = "      \"type\": \"string\","]
5193#[doc = "      \"example\": \"BH01\""]
5194#[doc = "    },"]
5195#[doc = "    \"holeType\": {"]
5196#[doc = "      \"description\": \"Type of exploratory hole. Recommend using code from AGS format ABBR code list, e.g. CP+RC, with project specific codes defined using agsProjectCode. Alternatively, short description may be provided, e.g. cable percussion borehole with rotary follow on.\","]
5197#[doc = "      \"type\": \"string\","]
5198#[doc = "      \"example\": \"CP+RC\""]
5199#[doc = "    },"]
5200#[doc = "    \"holeUUID\": {"]
5201#[doc = "      \"description\": \"Universal/global unique identifier (UUID) for the hole. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. Other attributes should be used for IDs specific to the producer and/or client (see below).\","]
5202#[doc = "      \"type\": \"string\","]
5203#[doc = "      \"example\": \"523ad9ed-4f75-4a55-b251-c566a8b998bd\""]
5204#[doc = "    },"]
5205#[doc = "    \"profileCoordinates\": {"]
5206#[doc = "      \"description\": \"Coordinates of the line of the exploratory hole (3D, including elevation), i.e. top, bottom and intermediate changes in direction if required. Input as ordered list of coordinate tuples starting at the top. Used for holes that are not vertical, or not straight. May be used for straight vertical holes as alternative to topCoordinate and verticalHoleDepth.\","]
5207#[doc = "      \"type\": \"array\","]
5208#[doc = "      \"items\": {"]
5209#[doc = "        \"$ref\": \"#/$defs/coordinateTuple\""]
5210#[doc = "      },"]
5211#[doc = "      \"example\": ["]
5212#[doc = "        ["]
5213#[doc = "          1275.5,"]
5214#[doc = "          2195.0,"]
5215#[doc = "          15.25"]
5216#[doc = "        ],"]
5217#[doc = "        ["]
5218#[doc = "          1275.5,"]
5219#[doc = "          2195.0,"]
5220#[doc = "          -9.75"]
5221#[doc = "        ]"]
5222#[doc = "      ]"]
5223#[doc = "    },"]
5224#[doc = "    \"remarks\": {"]
5225#[doc = "      \"description\": \"Additional remarks, if required.\","]
5226#[doc = "      \"type\": \"string\","]
5227#[doc = "      \"example\": \"Original name on logs: BH1\""]
5228#[doc = "    },"]
5229#[doc = "    \"topCoordinate\": {"]
5230#[doc = "      \"description\": \"Coordinates of the top of the exploratory hole (3D, including elevation) as a coordinate tuple.\","]
5231#[doc = "      \"type\": \"array\","]
5232#[doc = "      \"$ref\": \"#/$defs/coordinateTuple\","]
5233#[doc = "      \"example\": ["]
5234#[doc = "        1275.5,"]
5235#[doc = "        2195.0,"]
5236#[doc = "        15.25"]
5237#[doc = "      ]"]
5238#[doc = "    },"]
5239#[doc = "    \"verticalHoleDepth\": {"]
5240#[doc = "      \"description\": \"Final depth of exploratory hole for vertical holes only. For non-vertical or non-straight holes use profileCoordinates instead.\","]
5241#[doc = "      \"type\": \"number\","]
5242#[doc = "      \"example\": 25"]
5243#[doc = "    }"]
5244#[doc = "  },"]
5245#[doc = "  \"additionalProperties\": false"]
5246#[doc = "}"]
5247#[doc = r" ```"]
5248#[doc = r" </details>"]
5249#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
5250#[serde(untagged)]
5251pub enum AgsiObservationExpHole {
5252    Variant0(AgsiObservationExpHoleVariant0),
5253    Variant1(AgsiObservationExpHoleVariant1),
5254}
5255impl ::std::convert::From<&Self> for AgsiObservationExpHole {
5256    fn from(value: &AgsiObservationExpHole) -> Self {
5257        value.clone()
5258    }
5259}
5260impl ::std::convert::From<AgsiObservationExpHoleVariant0> for AgsiObservationExpHole {
5261    fn from(value: AgsiObservationExpHoleVariant0) -> Self {
5262        Self::Variant0(value)
5263    }
5264}
5265impl ::std::convert::From<AgsiObservationExpHoleVariant1> for AgsiObservationExpHole {
5266    fn from(value: AgsiObservationExpHoleVariant1) -> Self {
5267        Self::Variant1(value)
5268    }
5269}
5270#[doc = "`AgsiObservationExpHoleVariant0`"]
5271#[doc = r""]
5272#[doc = r" <details><summary>JSON schema</summary>"]
5273#[doc = r""]
5274#[doc = r" ```json"]
5275#[doc = "{"]
5276#[doc = "  \"allOf\": ["]
5277#[doc = "    {"]
5278#[doc = "      \"type\": \"object\","]
5279#[doc = "      \"properties\": {"]
5280#[doc = "        \"agsiDataPropertyFromFile\": {"]
5281#[doc = "          \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference an external supporting data file.\","]
5282#[doc = "          \"type\": \"object\","]
5283#[doc = "          \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
5284#[doc = "        },"]
5285#[doc = "        \"agsiDataPropertyValue\": {"]
5286#[doc = "          \"description\": \"Array of embedded agsiDataPropertyValue objects. May be used for additional hole metadata or for profiles of test results for this hole, e.g. SPT vs depth/elevation.\","]
5287#[doc = "          \"type\": \"array\","]
5288#[doc = "          \"items\": {"]
5289#[doc = "            \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
5290#[doc = "          }"]
5291#[doc = "        },"]
5292#[doc = "        \"agsiObservationColumn\": {"]
5293#[doc = "          \"description\": \"Array of embedded agsiObservationColumn objects which are typically used to represent geology within the hole, but can also be used for other data. \","]
5294#[doc = "          \"type\": \"array\","]
5295#[doc = "          \"items\": {"]
5296#[doc = "            \"$ref\": \"#/$defs/agsiObservationColumn\""]
5297#[doc = "          }"]
5298#[doc = "        },"]
5299#[doc = "        \"date\": {"]
5300#[doc = "          \"description\": \"Date of exploration. Recommend using start date for holes that take more than one day.\","]
5301#[doc = "          \"type\": \"string\","]
5302#[doc = "          \"format\": \"date\","]
5303#[doc = "          \"example\": \"2018-05-23\""]
5304#[doc = "        },"]
5305#[doc = "        \"holeID\": {"]
5306#[doc = "          \"description\": \"Identifier that is unique across the project for exploratory holes. Not necessarily the same as the original hole ID (see holeName). If used, identifiers for holeID should be unique within the AGSi file. \","]
5307#[doc = "          \"type\": \"string\","]
5308#[doc = "          \"example\": \"A/BH01\""]
5309#[doc = "        },"]
5310#[doc = "        \"holeName\": {"]
5311#[doc = "          \"description\": \"Current name or ID of the exploratory hole for general use.\","]
5312#[doc = "          \"type\": \"string\","]
5313#[doc = "          \"example\": \"BH01\""]
5314#[doc = "        },"]
5315#[doc = "        \"holeType\": {"]
5316#[doc = "          \"description\": \"Type of exploratory hole. Recommend using code from AGS format ABBR code list, e.g. CP+RC, with project specific codes defined using agsProjectCode. Alternatively, short description may be provided, e.g. cable percussion borehole with rotary follow on.\","]
5317#[doc = "          \"type\": \"string\","]
5318#[doc = "          \"example\": \"CP+RC\""]
5319#[doc = "        },"]
5320#[doc = "        \"holeUUID\": {"]
5321#[doc = "          \"description\": \"Universal/global unique identifier (UUID) for the hole. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. Other attributes should be used for IDs specific to the producer and/or client (see below).\","]
5322#[doc = "          \"type\": \"string\","]
5323#[doc = "          \"example\": \"523ad9ed-4f75-4a55-b251-c566a8b998bd\""]
5324#[doc = "        },"]
5325#[doc = "        \"profileCoordinates\": {"]
5326#[doc = "          \"description\": \"Coordinates of the line of the exploratory hole (3D, including elevation), i.e. top, bottom and intermediate changes in direction if required. Input as ordered list of coordinate tuples starting at the top. Used for holes that are not vertical, or not straight. May be used for straight vertical holes as alternative to topCoordinate and verticalHoleDepth.\","]
5327#[doc = "          \"type\": \"array\","]
5328#[doc = "          \"items\": {"]
5329#[doc = "            \"$ref\": \"#/$defs/coordinateTuple\""]
5330#[doc = "          },"]
5331#[doc = "          \"example\": ["]
5332#[doc = "            ["]
5333#[doc = "              1275.5,"]
5334#[doc = "              2195.0,"]
5335#[doc = "              15.25"]
5336#[doc = "            ],"]
5337#[doc = "            ["]
5338#[doc = "              1275.5,"]
5339#[doc = "              2195.0,"]
5340#[doc = "              -9.75"]
5341#[doc = "            ]"]
5342#[doc = "          ]"]
5343#[doc = "        },"]
5344#[doc = "        \"remarks\": {"]
5345#[doc = "          \"description\": \"Additional remarks, if required.\","]
5346#[doc = "          \"type\": \"string\","]
5347#[doc = "          \"example\": \"Original name on logs: BH1\""]
5348#[doc = "        },"]
5349#[doc = "        \"topCoordinate\": {"]
5350#[doc = "          \"description\": \"Coordinates of the top of the exploratory hole (3D, including elevation) as a coordinate tuple.\","]
5351#[doc = "          \"type\": \"array\","]
5352#[doc = "          \"$ref\": \"#/$defs/coordinateTuple\","]
5353#[doc = "          \"example\": ["]
5354#[doc = "            1275.5,"]
5355#[doc = "            2195.0,"]
5356#[doc = "            15.25"]
5357#[doc = "          ]"]
5358#[doc = "        },"]
5359#[doc = "        \"verticalHoleDepth\": {"]
5360#[doc = "          \"description\": \"Final depth of exploratory hole for vertical holes only. For non-vertical or non-straight holes use profileCoordinates instead.\","]
5361#[doc = "          \"type\": \"number\","]
5362#[doc = "          \"example\": 25"]
5363#[doc = "        }"]
5364#[doc = "      },"]
5365#[doc = "      \"additionalProperties\": false"]
5366#[doc = "    },"]
5367#[doc = "    {"]
5368#[doc = "      \"required\": ["]
5369#[doc = "        \"holeID\","]
5370#[doc = "        \"topCoordinate\","]
5371#[doc = "        \"verticalHoleDepth\""]
5372#[doc = "      ]"]
5373#[doc = "    },"]
5374#[doc = "    {"]
5375#[doc = "      \"not\": {"]
5376#[doc = "        \"required\": ["]
5377#[doc = "          \"holeID\","]
5378#[doc = "          \"profileCoordinates\""]
5379#[doc = "        ]"]
5380#[doc = "      }"]
5381#[doc = "    }"]
5382#[doc = "  ]"]
5383#[doc = "}"]
5384#[doc = r" ```"]
5385#[doc = r" </details>"]
5386#[derive(
5387    :: serde :: Deserialize,
5388    :: serde :: Serialize,
5389    Clone,
5390    Copy,
5391    Debug,
5392    Eq,
5393    Hash,
5394    Ord,
5395    PartialEq,
5396    PartialOrd,
5397)]
5398#[serde(deny_unknown_fields)]
5399pub enum AgsiObservationExpHoleVariant0 {}
5400impl ::std::convert::From<&Self> for AgsiObservationExpHoleVariant0 {
5401    fn from(value: &AgsiObservationExpHoleVariant0) -> Self {
5402        value.clone()
5403    }
5404}
5405#[doc = "`AgsiObservationExpHoleVariant1`"]
5406#[doc = r""]
5407#[doc = r" <details><summary>JSON schema</summary>"]
5408#[doc = r""]
5409#[doc = r" ```json"]
5410#[doc = "{"]
5411#[doc = "  \"allOf\": ["]
5412#[doc = "    {"]
5413#[doc = "      \"type\": \"object\","]
5414#[doc = "      \"properties\": {"]
5415#[doc = "        \"agsiDataPropertyFromFile\": {"]
5416#[doc = "          \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference an external supporting data file.\","]
5417#[doc = "          \"type\": \"object\","]
5418#[doc = "          \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
5419#[doc = "        },"]
5420#[doc = "        \"agsiDataPropertyValue\": {"]
5421#[doc = "          \"description\": \"Array of embedded agsiDataPropertyValue objects. May be used for additional hole metadata or for profiles of test results for this hole, e.g. SPT vs depth/elevation.\","]
5422#[doc = "          \"type\": \"array\","]
5423#[doc = "          \"items\": {"]
5424#[doc = "            \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
5425#[doc = "          }"]
5426#[doc = "        },"]
5427#[doc = "        \"agsiObservationColumn\": {"]
5428#[doc = "          \"description\": \"Array of embedded agsiObservationColumn objects which are typically used to represent geology within the hole, but can also be used for other data. \","]
5429#[doc = "          \"type\": \"array\","]
5430#[doc = "          \"items\": {"]
5431#[doc = "            \"$ref\": \"#/$defs/agsiObservationColumn\""]
5432#[doc = "          }"]
5433#[doc = "        },"]
5434#[doc = "        \"date\": {"]
5435#[doc = "          \"description\": \"Date of exploration. Recommend using start date for holes that take more than one day.\","]
5436#[doc = "          \"type\": \"string\","]
5437#[doc = "          \"format\": \"date\","]
5438#[doc = "          \"example\": \"2018-05-23\""]
5439#[doc = "        },"]
5440#[doc = "        \"holeID\": {"]
5441#[doc = "          \"description\": \"Identifier that is unique across the project for exploratory holes. Not necessarily the same as the original hole ID (see holeName). If used, identifiers for holeID should be unique within the AGSi file. \","]
5442#[doc = "          \"type\": \"string\","]
5443#[doc = "          \"example\": \"A/BH01\""]
5444#[doc = "        },"]
5445#[doc = "        \"holeName\": {"]
5446#[doc = "          \"description\": \"Current name or ID of the exploratory hole for general use.\","]
5447#[doc = "          \"type\": \"string\","]
5448#[doc = "          \"example\": \"BH01\""]
5449#[doc = "        },"]
5450#[doc = "        \"holeType\": {"]
5451#[doc = "          \"description\": \"Type of exploratory hole. Recommend using code from AGS format ABBR code list, e.g. CP+RC, with project specific codes defined using agsProjectCode. Alternatively, short description may be provided, e.g. cable percussion borehole with rotary follow on.\","]
5452#[doc = "          \"type\": \"string\","]
5453#[doc = "          \"example\": \"CP+RC\""]
5454#[doc = "        },"]
5455#[doc = "        \"holeUUID\": {"]
5456#[doc = "          \"description\": \"Universal/global unique identifier (UUID) for the hole. This is optional and is not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity. Other attributes should be used for IDs specific to the producer and/or client (see below).\","]
5457#[doc = "          \"type\": \"string\","]
5458#[doc = "          \"example\": \"523ad9ed-4f75-4a55-b251-c566a8b998bd\""]
5459#[doc = "        },"]
5460#[doc = "        \"profileCoordinates\": {"]
5461#[doc = "          \"description\": \"Coordinates of the line of the exploratory hole (3D, including elevation), i.e. top, bottom and intermediate changes in direction if required. Input as ordered list of coordinate tuples starting at the top. Used for holes that are not vertical, or not straight. May be used for straight vertical holes as alternative to topCoordinate and verticalHoleDepth.\","]
5462#[doc = "          \"type\": \"array\","]
5463#[doc = "          \"items\": {"]
5464#[doc = "            \"$ref\": \"#/$defs/coordinateTuple\""]
5465#[doc = "          },"]
5466#[doc = "          \"example\": ["]
5467#[doc = "            ["]
5468#[doc = "              1275.5,"]
5469#[doc = "              2195.0,"]
5470#[doc = "              15.25"]
5471#[doc = "            ],"]
5472#[doc = "            ["]
5473#[doc = "              1275.5,"]
5474#[doc = "              2195.0,"]
5475#[doc = "              -9.75"]
5476#[doc = "            ]"]
5477#[doc = "          ]"]
5478#[doc = "        },"]
5479#[doc = "        \"remarks\": {"]
5480#[doc = "          \"description\": \"Additional remarks, if required.\","]
5481#[doc = "          \"type\": \"string\","]
5482#[doc = "          \"example\": \"Original name on logs: BH1\""]
5483#[doc = "        },"]
5484#[doc = "        \"topCoordinate\": {"]
5485#[doc = "          \"description\": \"Coordinates of the top of the exploratory hole (3D, including elevation) as a coordinate tuple.\","]
5486#[doc = "          \"type\": \"array\","]
5487#[doc = "          \"$ref\": \"#/$defs/coordinateTuple\","]
5488#[doc = "          \"example\": ["]
5489#[doc = "            1275.5,"]
5490#[doc = "            2195.0,"]
5491#[doc = "            15.25"]
5492#[doc = "          ]"]
5493#[doc = "        },"]
5494#[doc = "        \"verticalHoleDepth\": {"]
5495#[doc = "          \"description\": \"Final depth of exploratory hole for vertical holes only. For non-vertical or non-straight holes use profileCoordinates instead.\","]
5496#[doc = "          \"type\": \"number\","]
5497#[doc = "          \"example\": 25"]
5498#[doc = "        }"]
5499#[doc = "      },"]
5500#[doc = "      \"additionalProperties\": false"]
5501#[doc = "    },"]
5502#[doc = "    {"]
5503#[doc = "      \"required\": ["]
5504#[doc = "        \"holeID\","]
5505#[doc = "        \"profileCoordinates\""]
5506#[doc = "      ]"]
5507#[doc = "    },"]
5508#[doc = "    {"]
5509#[doc = "      \"not\": {"]
5510#[doc = "        \"required\": ["]
5511#[doc = "          \"holeID\","]
5512#[doc = "          \"topCoordinate\","]
5513#[doc = "          \"verticalHoleDepth\""]
5514#[doc = "        ]"]
5515#[doc = "      }"]
5516#[doc = "    }"]
5517#[doc = "  ]"]
5518#[doc = "}"]
5519#[doc = r" ```"]
5520#[doc = r" </details>"]
5521#[derive(
5522    :: serde :: Deserialize,
5523    :: serde :: Serialize,
5524    Clone,
5525    Copy,
5526    Debug,
5527    Eq,
5528    Hash,
5529    Ord,
5530    PartialEq,
5531    PartialOrd,
5532)]
5533#[serde(deny_unknown_fields)]
5534pub enum AgsiObservationExpHoleVariant1 {}
5535impl ::std::convert::From<&Self> for AgsiObservationExpHoleVariant1 {
5536    fn from(value: &AgsiObservationExpHoleVariant1) -> Self {
5537        value.clone()
5538    }
5539}
5540#[doc = "An agsiObservationPoint is an observation related to a single geographic point, which may be defined in 2D or 3D space as required. Observations can be text or numeric value(s). Alternatively, a single agsiObservationPoint object can be used to provide attributed data using embedded agsiDataPropertyValue objects. For observations that relate to a line, area, volume or series of points, use agsiObservationShape. For GI exploratory holes and their data, use agsiObservationExpHole."]
5541#[doc = r""]
5542#[doc = r" <details><summary>JSON schema</summary>"]
5543#[doc = r""]
5544#[doc = r" ```json"]
5545#[doc = "{"]
5546#[doc = "  \"description\": \"An agsiObservationPoint is an observation related to a single geographic point, which may be defined in 2D or 3D space as required. Observations can be text or numeric value(s). Alternatively, a single agsiObservationPoint object can be used to provide attributed data using embedded agsiDataPropertyValue objects. For observations that relate to a line, area, volume or series of points, use agsiObservationShape. For GI exploratory holes and their data, use agsiObservationExpHole.\","]
5547#[doc = "  \"type\": \"object\","]
5548#[doc = "  \"required\": ["]
5549#[doc = "    \"coordinate\""]
5550#[doc = "  ],"]
5551#[doc = "  \"properties\": {"]
5552#[doc = "    \"agsiDataPropertyFromFile\": {"]
5553#[doc = "      \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file.\","]
5554#[doc = "      \"type\": \"object\","]
5555#[doc = "      \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
5556#[doc = "    },"]
5557#[doc = "    \"agsiDataPropertyValue\": {"]
5558#[doc = "      \"description\": \"Array of embedded agsiDataPropertyValue objects. May be used to provide attributed data for this observation (numeric and/or text).\","]
5559#[doc = "      \"type\": \"array\","]
5560#[doc = "      \"items\": {"]
5561#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
5562#[doc = "      }"]
5563#[doc = "    },"]
5564#[doc = "    \"coordinate\": {"]
5565#[doc = "      \"description\": \"Coordinates of the location of the observation point, as a coordinate tuple. Coordinates provided may be 2D (x,y) or 3D (x,y,z).\","]
5566#[doc = "      \"type\": \"array\","]
5567#[doc = "      \"$ref\": \"#/$defs/coordinateTuple\","]
5568#[doc = "      \"example\": ["]
5569#[doc = "        1280.0,"]
5570#[doc = "        2195.0"]
5571#[doc = "      ]"]
5572#[doc = "    },"]
5573#[doc = "    \"date\": {"]
5574#[doc = "      \"description\": \"Date of observation, if applicable.\","]
5575#[doc = "      \"type\": \"string\","]
5576#[doc = "      \"format\": \"date\","]
5577#[doc = "      \"example\": \"2018-05-18\""]
5578#[doc = "    },"]
5579#[doc = "    \"madeBy\": {"]
5580#[doc = "      \"description\": \"Name and/or organisation of person(s) making the observation, if applicable.\","]
5581#[doc = "      \"type\": \"string\","]
5582#[doc = "      \"example\": \"J Smith (ABC Consultants)\""]
5583#[doc = "    },"]
5584#[doc = "    \"observationID\": {"]
5585#[doc = "      \"description\": \"Identifier for this observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for observationID should be unique at least within each observation set (agsiObservationSet object), and preferably unique within the AGSi file. \","]
5586#[doc = "      \"type\": \"string\","]
5587#[doc = "      \"example\": \"GIHole/A/Obs/001\""]
5588#[doc = "    },"]
5589#[doc = "    \"observationNature\": {"]
5590#[doc = "      \"description\": \"Description of the nature of the observation (use observationText for the observation itself).\","]
5591#[doc = "      \"type\": \"string\","]
5592#[doc = "      \"example\": \"GI field notes\""]
5593#[doc = "    },"]
5594#[doc = "    \"observationText\": {"]
5595#[doc = "      \"description\": \"Description of the observation as text. Not required if agsiDataPropertyValue used to provide attributed data.\","]
5596#[doc = "      \"type\": \"string\","]
5597#[doc = "      \"example\": \"Original proposed location of BH01.  Hole moved due to concrete obstruction encountered at this location. \""]
5598#[doc = "    },"]
5599#[doc = "    \"remarks\": {"]
5600#[doc = "      \"description\": \"Additional remarks, if required.\","]
5601#[doc = "      \"type\": \"string\","]
5602#[doc = "      \"example\": \"Some remarks if required\""]
5603#[doc = "    }"]
5604#[doc = "  },"]
5605#[doc = "  \"additionalProperties\": false"]
5606#[doc = "}"]
5607#[doc = r" ```"]
5608#[doc = r" </details>"]
5609#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
5610#[serde(deny_unknown_fields)]
5611pub struct AgsiObservationPoint {
5612    #[doc = "An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file."]
5613    #[serde(
5614        rename = "agsiDataPropertyFromFile",
5615        default,
5616        skip_serializing_if = "::std::option::Option::is_none"
5617    )]
5618    pub agsi_data_property_from_file: ::std::option::Option<AgsiDataPropertyFromFile>,
5619    #[doc = "Array of embedded agsiDataPropertyValue objects. May be used to provide attributed data for this observation (numeric and/or text)."]
5620    #[serde(
5621        rename = "agsiDataPropertyValue",
5622        default,
5623        skip_serializing_if = "::std::vec::Vec::is_empty"
5624    )]
5625    pub agsi_data_property_value: ::std::vec::Vec<AgsiDataPropertyValue>,
5626    #[doc = "Coordinates of the location of the observation point, as a coordinate tuple. Coordinates provided may be 2D (x,y) or 3D (x,y,z)."]
5627    pub coordinate: CoordinateTuple,
5628    #[doc = "Date of observation, if applicable."]
5629    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5630    pub date: ::std::option::Option<::chrono::naive::NaiveDate>,
5631    #[doc = "Name and/or organisation of person(s) making the observation, if applicable."]
5632    #[serde(
5633        rename = "madeBy",
5634        default,
5635        skip_serializing_if = "::std::option::Option::is_none"
5636    )]
5637    pub made_by: ::std::option::Option<::std::string::String>,
5638    #[doc = "Identifier for this observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for observationID should be unique at least within each observation set (agsiObservationSet object), and preferably unique within the AGSi file. "]
5639    #[serde(
5640        rename = "observationID",
5641        default,
5642        skip_serializing_if = "::std::option::Option::is_none"
5643    )]
5644    pub observation_id: ::std::option::Option<::std::string::String>,
5645    #[doc = "Description of the nature of the observation (use observationText for the observation itself)."]
5646    #[serde(
5647        rename = "observationNature",
5648        default,
5649        skip_serializing_if = "::std::option::Option::is_none"
5650    )]
5651    pub observation_nature: ::std::option::Option<::std::string::String>,
5652    #[doc = "Description of the observation as text. Not required if agsiDataPropertyValue used to provide attributed data."]
5653    #[serde(
5654        rename = "observationText",
5655        default,
5656        skip_serializing_if = "::std::option::Option::is_none"
5657    )]
5658    pub observation_text: ::std::option::Option<::std::string::String>,
5659    #[doc = "Additional remarks, if required."]
5660    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5661    pub remarks: ::std::option::Option<::std::string::String>,
5662}
5663impl ::std::convert::From<&AgsiObservationPoint> for AgsiObservationPoint {
5664    fn from(value: &AgsiObservationPoint) -> Self {
5665        value.clone()
5666    }
5667}
5668impl AgsiObservationPoint {
5669    pub fn builder() -> builder::AgsiObservationPoint {
5670        Default::default()
5671    }
5672}
5673#[doc = "An agsiObservationSet object is a user defined set of observations. The individual observations are included as embedded objects agsiObservationPoint, agsiObservationShape and agsiObservationExpHole. For exploratory holes, a set may typically correspond to the holes from a particular ground investigation. For other types of observations, users/specifiers may decide how best to group the observations."]
5674#[doc = r""]
5675#[doc = r" <details><summary>JSON schema</summary>"]
5676#[doc = r""]
5677#[doc = r" ```json"]
5678#[doc = "{"]
5679#[doc = "  \"description\": \"An agsiObservationSet object is a user defined set of observations. The individual observations are included as embedded objects agsiObservationPoint, agsiObservationShape and agsiObservationExpHole. For exploratory holes, a set may typically correspond to the holes from a particular ground investigation. For other types of observations, users/specifiers may decide how best to group the observations.\","]
5680#[doc = "  \"type\": \"object\","]
5681#[doc = "  \"properties\": {"]
5682#[doc = "    \"agsiDataPropertyFromFile\": {"]
5683#[doc = "      \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file.\","]
5684#[doc = "      \"type\": \"object\","]
5685#[doc = "      \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
5686#[doc = "    },"]
5687#[doc = "    \"agsiGeometryFromFile\": {"]
5688#[doc = "      \"description\": \"An embedded Geometry object defining an appropriate geometry for this set of observations, which will be a reference to an external file. Optional, and should only be used for geometry appropriate to the entire set. Geometry for individual observations should be defined in the embedded child observation objects.\","]
5689#[doc = "      \"type\": \"object\","]
5690#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
5691#[doc = "    },"]
5692#[doc = "    \"agsiObservationExpHole\": {"]
5693#[doc = "      \"description\": \"Array of embedded agsiObservationExpHole objects.\","]
5694#[doc = "      \"type\": \"array\","]
5695#[doc = "      \"items\": {"]
5696#[doc = "        \"$ref\": \"#/$defs/agsiObservationExpHole\""]
5697#[doc = "      }"]
5698#[doc = "    },"]
5699#[doc = "    \"agsiObservationPoint\": {"]
5700#[doc = "      \"description\": \"Array of embedded agsiObservationPoint objects.\","]
5701#[doc = "      \"type\": \"array\","]
5702#[doc = "      \"items\": {"]
5703#[doc = "        \"$ref\": \"#/$defs/agsiObservationPoint\""]
5704#[doc = "      }"]
5705#[doc = "    },"]
5706#[doc = "    \"agsiObservationShape\": {"]
5707#[doc = "      \"description\": \"Array of embedded agsiObservationShape objects.\","]
5708#[doc = "      \"type\": \"array\","]
5709#[doc = "      \"items\": {"]
5710#[doc = "        \"$ref\": \"#/$defs/agsiObservationShape\""]
5711#[doc = "      }"]
5712#[doc = "    },"]
5713#[doc = "    \"description\": {"]
5714#[doc = "      \"description\": \"Short description of the set of observations defined here.\","]
5715#[doc = "      \"type\": \"string\","]
5716#[doc = "      \"example\": \"2018 GI Package A\""]
5717#[doc = "    },"]
5718#[doc = "    \"documentSetID\": {"]
5719#[doc = "      \"description\": \"Reference to report(s) relating to this set of observations, details of which should be provided in agsProjectDocumentSet\","]
5720#[doc = "      \"type\": \"string\","]
5721#[doc = "      \"example\": \"ExampleDocSetID\""]
5722#[doc = "    },"]
5723#[doc = "    \"investigationID\": {"]
5724#[doc = "      \"description\": \"For a set that represents a GI, reference to the identifier for the corresponding agsProjectInvestigation object, if used.\","]
5725#[doc = "      \"type\": \"string\","]
5726#[doc = "      \"example\": \"GIPackageA\""]
5727#[doc = "    },"]
5728#[doc = "    \"observationSetID\": {"]
5729#[doc = "      \"description\": \"Identifier for this set of observations. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it.  If used, identifiers for observationSetID should be unique within the AGSi file. \","]
5730#[doc = "      \"type\": \"string\","]
5731#[doc = "      \"example\": \"Obs/GIHolesA\""]
5732#[doc = "    },"]
5733#[doc = "    \"remarks\": {"]
5734#[doc = "      \"description\": \"Additional remarks, if required.\","]
5735#[doc = "      \"type\": \"string\","]
5736#[doc = "      \"example\": \"Some remarks if required\""]
5737#[doc = "    }"]
5738#[doc = "  },"]
5739#[doc = "  \"additionalProperties\": false"]
5740#[doc = "}"]
5741#[doc = r" ```"]
5742#[doc = r" </details>"]
5743#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
5744#[serde(deny_unknown_fields)]
5745pub struct AgsiObservationSet {
5746    #[doc = "An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file."]
5747    #[serde(
5748        rename = "agsiDataPropertyFromFile",
5749        default,
5750        skip_serializing_if = "::std::option::Option::is_none"
5751    )]
5752    pub agsi_data_property_from_file: ::std::option::Option<AgsiDataPropertyFromFile>,
5753    #[doc = "An embedded Geometry object defining an appropriate geometry for this set of observations, which will be a reference to an external file. Optional, and should only be used for geometry appropriate to the entire set. Geometry for individual observations should be defined in the embedded child observation objects."]
5754    #[serde(
5755        rename = "agsiGeometryFromFile",
5756        default,
5757        skip_serializing_if = "::std::option::Option::is_none"
5758    )]
5759    pub agsi_geometry_from_file: ::std::option::Option<AgsiGeometryFromFile>,
5760    #[doc = "Array of embedded agsiObservationExpHole objects."]
5761    #[serde(
5762        rename = "agsiObservationExpHole",
5763        default,
5764        skip_serializing_if = "::std::vec::Vec::is_empty"
5765    )]
5766    pub agsi_observation_exp_hole: ::std::vec::Vec<AgsiObservationExpHole>,
5767    #[doc = "Array of embedded agsiObservationPoint objects."]
5768    #[serde(
5769        rename = "agsiObservationPoint",
5770        default,
5771        skip_serializing_if = "::std::vec::Vec::is_empty"
5772    )]
5773    pub agsi_observation_point: ::std::vec::Vec<AgsiObservationPoint>,
5774    #[doc = "Array of embedded agsiObservationShape objects."]
5775    #[serde(
5776        rename = "agsiObservationShape",
5777        default,
5778        skip_serializing_if = "::std::vec::Vec::is_empty"
5779    )]
5780    pub agsi_observation_shape: ::std::vec::Vec<AgsiObservationShape>,
5781    #[doc = "Short description of the set of observations defined here."]
5782    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5783    pub description: ::std::option::Option<::std::string::String>,
5784    #[doc = "Reference to report(s) relating to this set of observations, details of which should be provided in agsProjectDocumentSet"]
5785    #[serde(
5786        rename = "documentSetID",
5787        default,
5788        skip_serializing_if = "::std::option::Option::is_none"
5789    )]
5790    pub document_set_id: ::std::option::Option<::std::string::String>,
5791    #[doc = "For a set that represents a GI, reference to the identifier for the corresponding agsProjectInvestigation object, if used."]
5792    #[serde(
5793        rename = "investigationID",
5794        default,
5795        skip_serializing_if = "::std::option::Option::is_none"
5796    )]
5797    pub investigation_id: ::std::option::Option<::std::string::String>,
5798    #[doc = "Identifier for this set of observations. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it.  If used, identifiers for observationSetID should be unique within the AGSi file. "]
5799    #[serde(
5800        rename = "observationSetID",
5801        default,
5802        skip_serializing_if = "::std::option::Option::is_none"
5803    )]
5804    pub observation_set_id: ::std::option::Option<::std::string::String>,
5805    #[doc = "Additional remarks, if required."]
5806    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5807    pub remarks: ::std::option::Option<::std::string::String>,
5808}
5809impl ::std::convert::From<&AgsiObservationSet> for AgsiObservationSet {
5810    fn from(value: &AgsiObservationSet) -> Self {
5811        value.clone()
5812    }
5813}
5814impl ::std::default::Default for AgsiObservationSet {
5815    fn default() -> Self {
5816        Self {
5817            agsi_data_property_from_file: Default::default(),
5818            agsi_geometry_from_file: Default::default(),
5819            agsi_observation_exp_hole: Default::default(),
5820            agsi_observation_point: Default::default(),
5821            agsi_observation_shape: Default::default(),
5822            description: Default::default(),
5823            document_set_id: Default::default(),
5824            investigation_id: Default::default(),
5825            observation_set_id: Default::default(),
5826            remarks: Default::default(),
5827        }
5828    }
5829}
5830impl AgsiObservationSet {
5831    pub fn builder() -> builder::AgsiObservationSet {
5832        Default::default()
5833    }
5834}
5835#[doc = "An agsiObservationShape is an observation related to a geographic shape, e.g. line, area, volume or series of points, defined in 2D or 3D space as required. Observations can be text or numeric value(s). Alternatively, a single agsiObservationPoint object can be used to provide attributed data using embedded agsiDataPropertyValue objects. For observations that relate to a line, area, volume or series of points, use agsiObservationShape. For GI exploratory holes and their data, use agsiObservationExpHole."]
5836#[doc = r""]
5837#[doc = r" <details><summary>JSON schema</summary>"]
5838#[doc = r""]
5839#[doc = r" ```json"]
5840#[doc = "{"]
5841#[doc = "  \"description\": \"An agsiObservationShape is an observation related to a geographic shape, e.g. line, area, volume or series of points, defined in 2D or 3D space as required. Observations can be text or numeric value(s). Alternatively, a single agsiObservationPoint object can be used to provide attributed data using embedded agsiDataPropertyValue objects. For observations that relate to a line, area, volume or series of points, use agsiObservationShape. For GI exploratory holes and their data, use agsiObservationExpHole.\","]
5842#[doc = "  \"type\": \"object\","]
5843#[doc = "  \"required\": ["]
5844#[doc = "    \"agsiGeometryFromFile\""]
5845#[doc = "  ],"]
5846#[doc = "  \"properties\": {"]
5847#[doc = "    \"agsiDataPropertyFromFile\": {"]
5848#[doc = "      \"description\": \"An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file.\","]
5849#[doc = "      \"type\": \"object\","]
5850#[doc = "      \"$ref\": \"#/$defs/agsiDataPropertyFromFile\""]
5851#[doc = "    },"]
5852#[doc = "    \"agsiDataPropertyValue\": {"]
5853#[doc = "      \"description\": \"Array of embedded agsiDataPropertyValue objects. May be used to provide attributed data for this observation (numeric values and/or text).\","]
5854#[doc = "      \"type\": \"array\","]
5855#[doc = "      \"items\": {"]
5856#[doc = "        \"$ref\": \"#/$defs/agsiDataPropertyValue\""]
5857#[doc = "      }"]
5858#[doc = "    },"]
5859#[doc = "    \"agsiGeometryFromFile\": {"]
5860#[doc = "      \"description\": \"An embedded Geometry object defining the geometry for this observation, or the location of the observation, which will be a reference to an external file. The geometry may comprise: line, area, volume (or sets therefore), or a set of points.\","]
5861#[doc = "      \"type\": \"object\","]
5862#[doc = "      \"$ref\": \"#/$defs/agsiGeometryFromFile\""]
5863#[doc = "    },"]
5864#[doc = "    \"date\": {"]
5865#[doc = "      \"description\": \"Date of observation, if applicable.\","]
5866#[doc = "      \"type\": \"string\","]
5867#[doc = "      \"format\": \"date\","]
5868#[doc = "      \"example\": \"2018-03-13\""]
5869#[doc = "    },"]
5870#[doc = "    \"madeBy\": {"]
5871#[doc = "      \"description\": \"Name and/or organisation of person(s) making the observation, if applicable.\","]
5872#[doc = "      \"type\": \"string\","]
5873#[doc = "      \"example\": \"S Jones (ABC Consultants)\""]
5874#[doc = "    },"]
5875#[doc = "    \"observationID\": {"]
5876#[doc = "      \"description\": \"Identifier for this observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for observationID should be unique at least within each observation set (agsiObservationSet object), and preferably unique within the AGSi file. \","]
5877#[doc = "      \"type\": \"string\","]
5878#[doc = "      \"example\": \"FieldGeology/Obs/001\""]
5879#[doc = "    },"]
5880#[doc = "    \"observationNature\": {"]
5881#[doc = "      \"description\": \"Description of the nature of the observation (use observationText for the observation itself).\","]
5882#[doc = "      \"type\": \"string\","]
5883#[doc = "      \"example\": \"Geological field survey of visible outcrop\""]
5884#[doc = "    },"]
5885#[doc = "    \"observationText\": {"]
5886#[doc = "      \"description\": \"Description of the observation as text. Not required if agsiDataPropertyValue used to provide attributed data.\","]
5887#[doc = "      \"type\": \"string\","]
5888#[doc = "      \"example\": \"Surveyed boundary of top of Gotham Clay, in side of exposed cutting.\""]
5889#[doc = "    },"]
5890#[doc = "    \"remarks\": {"]
5891#[doc = "      \"description\": \"Additional remarks, if required.\","]
5892#[doc = "      \"type\": \"string\","]
5893#[doc = "      \"example\": \"Some remarks if required\""]
5894#[doc = "    }"]
5895#[doc = "  },"]
5896#[doc = "  \"additionalProperties\": false"]
5897#[doc = "}"]
5898#[doc = r" ```"]
5899#[doc = r" </details>"]
5900#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
5901#[serde(deny_unknown_fields)]
5902pub struct AgsiObservationShape {
5903    #[doc = "An embedded agsiDataPropertyFromFile object, which may be used to reference to an external supporting data file."]
5904    #[serde(
5905        rename = "agsiDataPropertyFromFile",
5906        default,
5907        skip_serializing_if = "::std::option::Option::is_none"
5908    )]
5909    pub agsi_data_property_from_file: ::std::option::Option<AgsiDataPropertyFromFile>,
5910    #[doc = "Array of embedded agsiDataPropertyValue objects. May be used to provide attributed data for this observation (numeric values and/or text)."]
5911    #[serde(
5912        rename = "agsiDataPropertyValue",
5913        default,
5914        skip_serializing_if = "::std::vec::Vec::is_empty"
5915    )]
5916    pub agsi_data_property_value: ::std::vec::Vec<AgsiDataPropertyValue>,
5917    #[doc = "An embedded Geometry object defining the geometry for this observation, or the location of the observation, which will be a reference to an external file. The geometry may comprise: line, area, volume (or sets therefore), or a set of points."]
5918    #[serde(rename = "agsiGeometryFromFile")]
5919    pub agsi_geometry_from_file: AgsiGeometryFromFile,
5920    #[doc = "Date of observation, if applicable."]
5921    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5922    pub date: ::std::option::Option<::chrono::naive::NaiveDate>,
5923    #[doc = "Name and/or organisation of person(s) making the observation, if applicable."]
5924    #[serde(
5925        rename = "madeBy",
5926        default,
5927        skip_serializing_if = "::std::option::Option::is_none"
5928    )]
5929    pub made_by: ::std::option::Option<::std::string::String>,
5930    #[doc = "Identifier for this observation. May be local to this file or a UUID as required/specified. This is optional and not referenced anywhere else in the schema, but it may be beneficial to include this to help with data control and integrity, and some software/applications may require it. If used, identifiers for observationID should be unique at least within each observation set (agsiObservationSet object), and preferably unique within the AGSi file. "]
5931    #[serde(
5932        rename = "observationID",
5933        default,
5934        skip_serializing_if = "::std::option::Option::is_none"
5935    )]
5936    pub observation_id: ::std::option::Option<::std::string::String>,
5937    #[doc = "Description of the nature of the observation (use observationText for the observation itself)."]
5938    #[serde(
5939        rename = "observationNature",
5940        default,
5941        skip_serializing_if = "::std::option::Option::is_none"
5942    )]
5943    pub observation_nature: ::std::option::Option<::std::string::String>,
5944    #[doc = "Description of the observation as text. Not required if agsiDataPropertyValue used to provide attributed data."]
5945    #[serde(
5946        rename = "observationText",
5947        default,
5948        skip_serializing_if = "::std::option::Option::is_none"
5949    )]
5950    pub observation_text: ::std::option::Option<::std::string::String>,
5951    #[doc = "Additional remarks, if required."]
5952    #[serde(default, skip_serializing_if = "::std::option::Option::is_none")]
5953    pub remarks: ::std::option::Option<::std::string::String>,
5954}
5955impl ::std::convert::From<&AgsiObservationShape> for AgsiObservationShape {
5956    fn from(value: &AgsiObservationShape) -> Self {
5957        value.clone()
5958    }
5959}
5960impl AgsiObservationShape {
5961    pub fn builder() -> builder::AgsiObservationShape {
5962        Default::default()
5963    }
5964}
5965#[doc = "Sub-schema for a coordinate tuple, referenced from other objects"]
5966#[doc = r""]
5967#[doc = r" <details><summary>JSON schema</summary>"]
5968#[doc = r""]
5969#[doc = r" ```json"]
5970#[doc = "{"]
5971#[doc = "  \"description\": \"Sub-schema for a coordinate tuple, referenced from other objects\","]
5972#[doc = "  \"type\": \"array\","]
5973#[doc = "  \"items\": {"]
5974#[doc = "    \"type\": \"number\""]
5975#[doc = "  },"]
5976#[doc = "  \"maxItems\": 3,"]
5977#[doc = "  \"minItems\": 2"]
5978#[doc = "}"]
5979#[doc = r" ```"]
5980#[doc = r" </details>"]
5981#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
5982#[serde(transparent)]
5983pub struct CoordinateTuple(pub ::std::vec::Vec<f64>);
5984impl ::std::ops::Deref for CoordinateTuple {
5985    type Target = ::std::vec::Vec<f64>;
5986    fn deref(&self) -> &::std::vec::Vec<f64> {
5987        &self.0
5988    }
5989}
5990impl ::std::convert::From<CoordinateTuple> for ::std::vec::Vec<f64> {
5991    fn from(value: CoordinateTuple) -> Self {
5992        value.0
5993    }
5994}
5995impl ::std::convert::From<&CoordinateTuple> for CoordinateTuple {
5996    fn from(value: &CoordinateTuple) -> Self {
5997        value.clone()
5998    }
5999}
6000impl ::std::convert::From<::std::vec::Vec<f64>> for CoordinateTuple {
6001    fn from(value: ::std::vec::Vec<f64>) -> Self {
6002        Self(value)
6003    }
6004}
6005#[doc = "Sub-schema for a list of coordinate tuples, referenced from other objects"]
6006#[doc = r""]
6007#[doc = r" <details><summary>JSON schema</summary>"]
6008#[doc = r""]
6009#[doc = r" ```json"]
6010#[doc = "{"]
6011#[doc = "  \"description\": \"Sub-schema for a list of coordinate tuples, referenced from other objects\","]
6012#[doc = "  \"type\": \"array\","]
6013#[doc = "  \"items\": {"]
6014#[doc = "    \"type\": \"array\","]
6015#[doc = "    \"items\": {"]
6016#[doc = "      \"type\": \"number\""]
6017#[doc = "    },"]
6018#[doc = "    \"maxItems\": 2,"]
6019#[doc = "    \"minItems\": 2"]
6020#[doc = "  }"]
6021#[doc = "}"]
6022#[doc = r" ```"]
6023#[doc = r" </details>"]
6024#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
6025#[serde(transparent)]
6026pub struct ValueProfile(pub ::std::vec::Vec<[f64; 2usize]>);
6027impl ::std::ops::Deref for ValueProfile {
6028    type Target = ::std::vec::Vec<[f64; 2usize]>;
6029    fn deref(&self) -> &::std::vec::Vec<[f64; 2usize]> {
6030        &self.0
6031    }
6032}
6033impl ::std::convert::From<ValueProfile> for ::std::vec::Vec<[f64; 2usize]> {
6034    fn from(value: ValueProfile) -> Self {
6035        value.0
6036    }
6037}
6038impl ::std::convert::From<&ValueProfile> for ValueProfile {
6039    fn from(value: &ValueProfile) -> Self {
6040        value.clone()
6041    }
6042}
6043impl ::std::convert::From<::std::vec::Vec<[f64; 2usize]>> for ValueProfile {
6044    fn from(value: ::std::vec::Vec<[f64; 2usize]>) -> Self {
6045        Self(value)
6046    }
6047}
6048#[doc = r" Types for composing complex structures."]
6049pub mod builder {
6050    #[derive(Clone, Debug)]
6051    pub struct AgSiV101 {
6052        ags_file: ::std::result::Result<super::AgsFile, ::std::string::String>,
6053        ags_project:
6054            ::std::result::Result<::std::option::Option<super::AgsProject>, ::std::string::String>,
6055        ags_schema: ::std::result::Result<super::AgsSchema, ::std::string::String>,
6056        agsi_model: ::std::result::Result<::std::vec::Vec<super::AgsiModel>, ::std::string::String>,
6057    }
6058    impl ::std::default::Default for AgSiV101 {
6059        fn default() -> Self {
6060            Self {
6061                ags_file: Err("no value supplied for ags_file".to_string()),
6062                ags_project: Ok(Default::default()),
6063                ags_schema: Err("no value supplied for ags_schema".to_string()),
6064                agsi_model: Ok(Default::default()),
6065            }
6066        }
6067    }
6068    impl AgSiV101 {
6069        pub fn ags_file<T>(mut self, value: T) -> Self
6070        where
6071            T: ::std::convert::TryInto<super::AgsFile>,
6072            T::Error: ::std::fmt::Display,
6073        {
6074            self.ags_file = value
6075                .try_into()
6076                .map_err(|e| format!("error converting supplied value for ags_file: {}", e));
6077            self
6078        }
6079        pub fn ags_project<T>(mut self, value: T) -> Self
6080        where
6081            T: ::std::convert::TryInto<::std::option::Option<super::AgsProject>>,
6082            T::Error: ::std::fmt::Display,
6083        {
6084            self.ags_project = value
6085                .try_into()
6086                .map_err(|e| format!("error converting supplied value for ags_project: {}", e));
6087            self
6088        }
6089        pub fn ags_schema<T>(mut self, value: T) -> Self
6090        where
6091            T: ::std::convert::TryInto<super::AgsSchema>,
6092            T::Error: ::std::fmt::Display,
6093        {
6094            self.ags_schema = value
6095                .try_into()
6096                .map_err(|e| format!("error converting supplied value for ags_schema: {}", e));
6097            self
6098        }
6099        pub fn agsi_model<T>(mut self, value: T) -> Self
6100        where
6101            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiModel>>,
6102            T::Error: ::std::fmt::Display,
6103        {
6104            self.agsi_model = value
6105                .try_into()
6106                .map_err(|e| format!("error converting supplied value for agsi_model: {}", e));
6107            self
6108        }
6109    }
6110    impl ::std::convert::TryFrom<AgSiV101> for super::AgSiV101 {
6111        type Error = super::error::ConversionError;
6112        fn try_from(value: AgSiV101) -> ::std::result::Result<Self, super::error::ConversionError> {
6113            Ok(Self {
6114                ags_file: value.ags_file?,
6115                ags_project: value.ags_project?,
6116                ags_schema: value.ags_schema?,
6117                agsi_model: value.agsi_model?,
6118            })
6119        }
6120    }
6121    impl ::std::convert::From<super::AgSiV101> for AgSiV101 {
6122        fn from(value: super::AgSiV101) -> Self {
6123            Self {
6124                ags_file: Ok(value.ags_file),
6125                ags_project: Ok(value.ags_project),
6126                ags_schema: Ok(value.ags_schema),
6127                agsi_model: Ok(value.agsi_model),
6128            }
6129        }
6130    }
6131    #[derive(Clone, Debug)]
6132    pub struct AgsFile {
6133        approved_by: ::std::result::Result<
6134            ::std::option::Option<::std::string::String>,
6135            ::std::string::String,
6136        >,
6137        checked_by: ::std::result::Result<
6138            ::std::option::Option<::std::string::String>,
6139            ::std::string::String,
6140        >,
6141        date: ::std::result::Result<
6142            ::std::option::Option<::chrono::naive::NaiveDate>,
6143            ::std::string::String,
6144        >,
6145        description: ::std::result::Result<
6146            ::std::option::Option<::std::string::String>,
6147            ::std::string::String,
6148        >,
6149        file_uri: ::std::result::Result<
6150            ::std::option::Option<::std::string::String>,
6151            ::std::string::String,
6152        >,
6153        file_uuid: ::std::result::Result<
6154            ::std::option::Option<::std::string::String>,
6155            ::std::string::String,
6156        >,
6157        made_by: ::std::result::Result<
6158            ::std::option::Option<::std::string::String>,
6159            ::std::string::String,
6160        >,
6161        produced_by: ::std::result::Result<super::AgsFileProducedBy, ::std::string::String>,
6162        project_title: ::std::result::Result<
6163            ::std::option::Option<::std::string::String>,
6164            ::std::string::String,
6165        >,
6166        reference: ::std::result::Result<
6167            ::std::option::Option<::std::string::String>,
6168            ::std::string::String,
6169        >,
6170        remarks: ::std::result::Result<
6171            ::std::option::Option<::std::string::String>,
6172            ::std::string::String,
6173        >,
6174        revision: ::std::result::Result<
6175            ::std::option::Option<::std::string::String>,
6176            ::std::string::String,
6177        >,
6178        status: ::std::result::Result<
6179            ::std::option::Option<::std::string::String>,
6180            ::std::string::String,
6181        >,
6182        status_code: ::std::result::Result<
6183            ::std::option::Option<::std::string::String>,
6184            ::std::string::String,
6185        >,
6186        title: ::std::result::Result<super::AgsFileTitle, ::std::string::String>,
6187    }
6188    impl ::std::default::Default for AgsFile {
6189        fn default() -> Self {
6190            Self {
6191                approved_by: Ok(Default::default()),
6192                checked_by: Ok(Default::default()),
6193                date: Ok(Default::default()),
6194                description: Ok(Default::default()),
6195                file_uri: Ok(Default::default()),
6196                file_uuid: Ok(Default::default()),
6197                made_by: Ok(Default::default()),
6198                produced_by: Err("no value supplied for produced_by".to_string()),
6199                project_title: Ok(Default::default()),
6200                reference: Ok(Default::default()),
6201                remarks: Ok(Default::default()),
6202                revision: Ok(Default::default()),
6203                status: Ok(Default::default()),
6204                status_code: Ok(Default::default()),
6205                title: Err("no value supplied for title".to_string()),
6206            }
6207        }
6208    }
6209    impl AgsFile {
6210        pub fn approved_by<T>(mut self, value: T) -> Self
6211        where
6212            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6213            T::Error: ::std::fmt::Display,
6214        {
6215            self.approved_by = value
6216                .try_into()
6217                .map_err(|e| format!("error converting supplied value for approved_by: {}", e));
6218            self
6219        }
6220        pub fn checked_by<T>(mut self, value: T) -> Self
6221        where
6222            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6223            T::Error: ::std::fmt::Display,
6224        {
6225            self.checked_by = value
6226                .try_into()
6227                .map_err(|e| format!("error converting supplied value for checked_by: {}", e));
6228            self
6229        }
6230        pub fn date<T>(mut self, value: T) -> Self
6231        where
6232            T: ::std::convert::TryInto<::std::option::Option<::chrono::naive::NaiveDate>>,
6233            T::Error: ::std::fmt::Display,
6234        {
6235            self.date = value
6236                .try_into()
6237                .map_err(|e| format!("error converting supplied value for date: {}", e));
6238            self
6239        }
6240        pub fn description<T>(mut self, value: T) -> Self
6241        where
6242            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6243            T::Error: ::std::fmt::Display,
6244        {
6245            self.description = value
6246                .try_into()
6247                .map_err(|e| format!("error converting supplied value for description: {}", e));
6248            self
6249        }
6250        pub fn file_uri<T>(mut self, value: T) -> Self
6251        where
6252            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6253            T::Error: ::std::fmt::Display,
6254        {
6255            self.file_uri = value
6256                .try_into()
6257                .map_err(|e| format!("error converting supplied value for file_uri: {}", e));
6258            self
6259        }
6260        pub fn file_uuid<T>(mut self, value: T) -> Self
6261        where
6262            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6263            T::Error: ::std::fmt::Display,
6264        {
6265            self.file_uuid = value
6266                .try_into()
6267                .map_err(|e| format!("error converting supplied value for file_uuid: {}", e));
6268            self
6269        }
6270        pub fn made_by<T>(mut self, value: T) -> Self
6271        where
6272            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6273            T::Error: ::std::fmt::Display,
6274        {
6275            self.made_by = value
6276                .try_into()
6277                .map_err(|e| format!("error converting supplied value for made_by: {}", e));
6278            self
6279        }
6280        pub fn produced_by<T>(mut self, value: T) -> Self
6281        where
6282            T: ::std::convert::TryInto<super::AgsFileProducedBy>,
6283            T::Error: ::std::fmt::Display,
6284        {
6285            self.produced_by = value
6286                .try_into()
6287                .map_err(|e| format!("error converting supplied value for produced_by: {}", e));
6288            self
6289        }
6290        pub fn project_title<T>(mut self, value: T) -> Self
6291        where
6292            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6293            T::Error: ::std::fmt::Display,
6294        {
6295            self.project_title = value
6296                .try_into()
6297                .map_err(|e| format!("error converting supplied value for project_title: {}", e));
6298            self
6299        }
6300        pub fn reference<T>(mut self, value: T) -> Self
6301        where
6302            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6303            T::Error: ::std::fmt::Display,
6304        {
6305            self.reference = value
6306                .try_into()
6307                .map_err(|e| format!("error converting supplied value for reference: {}", e));
6308            self
6309        }
6310        pub fn remarks<T>(mut self, value: T) -> Self
6311        where
6312            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6313            T::Error: ::std::fmt::Display,
6314        {
6315            self.remarks = value
6316                .try_into()
6317                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
6318            self
6319        }
6320        pub fn revision<T>(mut self, value: T) -> Self
6321        where
6322            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6323            T::Error: ::std::fmt::Display,
6324        {
6325            self.revision = value
6326                .try_into()
6327                .map_err(|e| format!("error converting supplied value for revision: {}", e));
6328            self
6329        }
6330        pub fn status<T>(mut self, value: T) -> Self
6331        where
6332            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6333            T::Error: ::std::fmt::Display,
6334        {
6335            self.status = value
6336                .try_into()
6337                .map_err(|e| format!("error converting supplied value for status: {}", e));
6338            self
6339        }
6340        pub fn status_code<T>(mut self, value: T) -> Self
6341        where
6342            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6343            T::Error: ::std::fmt::Display,
6344        {
6345            self.status_code = value
6346                .try_into()
6347                .map_err(|e| format!("error converting supplied value for status_code: {}", e));
6348            self
6349        }
6350        pub fn title<T>(mut self, value: T) -> Self
6351        where
6352            T: ::std::convert::TryInto<super::AgsFileTitle>,
6353            T::Error: ::std::fmt::Display,
6354        {
6355            self.title = value
6356                .try_into()
6357                .map_err(|e| format!("error converting supplied value for title: {}", e));
6358            self
6359        }
6360    }
6361    impl ::std::convert::TryFrom<AgsFile> for super::AgsFile {
6362        type Error = super::error::ConversionError;
6363        fn try_from(value: AgsFile) -> ::std::result::Result<Self, super::error::ConversionError> {
6364            Ok(Self {
6365                approved_by: value.approved_by?,
6366                checked_by: value.checked_by?,
6367                date: value.date?,
6368                description: value.description?,
6369                file_uri: value.file_uri?,
6370                file_uuid: value.file_uuid?,
6371                made_by: value.made_by?,
6372                produced_by: value.produced_by?,
6373                project_title: value.project_title?,
6374                reference: value.reference?,
6375                remarks: value.remarks?,
6376                revision: value.revision?,
6377                status: value.status?,
6378                status_code: value.status_code?,
6379                title: value.title?,
6380            })
6381        }
6382    }
6383    impl ::std::convert::From<super::AgsFile> for AgsFile {
6384        fn from(value: super::AgsFile) -> Self {
6385            Self {
6386                approved_by: Ok(value.approved_by),
6387                checked_by: Ok(value.checked_by),
6388                date: Ok(value.date),
6389                description: Ok(value.description),
6390                file_uri: Ok(value.file_uri),
6391                file_uuid: Ok(value.file_uuid),
6392                made_by: Ok(value.made_by),
6393                produced_by: Ok(value.produced_by),
6394                project_title: Ok(value.project_title),
6395                reference: Ok(value.reference),
6396                remarks: Ok(value.remarks),
6397                revision: Ok(value.revision),
6398                status: Ok(value.status),
6399                status_code: Ok(value.status_code),
6400                title: Ok(value.title),
6401            }
6402        }
6403    }
6404    #[derive(Clone, Debug)]
6405    pub struct AgsProject {
6406        ags_project_code_set:
6407            ::std::result::Result<::std::vec::Vec<super::AgsProjectCodeSet>, ::std::string::String>,
6408        ags_project_coordinate_system: ::std::result::Result<
6409            ::std::vec::Vec<super::AgsProjectCoordinateSystem>,
6410            ::std::string::String,
6411        >,
6412        ags_project_document_set: ::std::result::Result<
6413            ::std::vec::Vec<super::AgsProjectDocumentSet>,
6414            ::std::string::String,
6415        >,
6416        ags_project_investigation: ::std::result::Result<
6417            ::std::vec::Vec<super::AgsProjectInvestigation>,
6418            ::std::string::String,
6419        >,
6420        brief_document_set_id: ::std::result::Result<
6421            ::std::option::Option<::std::string::String>,
6422            ::std::string::String,
6423        >,
6424        client: ::std::result::Result<
6425            ::std::option::Option<::std::string::String>,
6426            ::std::string::String,
6427        >,
6428        client_project_id: ::std::result::Result<
6429            ::std::option::Option<::std::string::String>,
6430            ::std::string::String,
6431        >,
6432        description: ::std::result::Result<
6433            ::std::option::Option<::std::string::String>,
6434            ::std::string::String,
6435        >,
6436        parent_project_name: ::std::result::Result<
6437            ::std::option::Option<::std::string::String>,
6438            ::std::string::String,
6439        >,
6440        producer: ::std::result::Result<
6441            ::std::option::Option<::std::string::String>,
6442            ::std::string::String,
6443        >,
6444        producer_project_id: ::std::result::Result<
6445            ::std::option::Option<::std::string::String>,
6446            ::std::string::String,
6447        >,
6448        producer_suppliers: ::std::result::Result<
6449            ::std::option::Option<::std::string::String>,
6450            ::std::string::String,
6451        >,
6452        project_country: ::std::result::Result<
6453            ::std::option::Option<::std::string::String>,
6454            ::std::string::String,
6455        >,
6456        project_name: ::std::result::Result<super::AgsProjectProjectName, ::std::string::String>,
6457        project_uuid: ::std::result::Result<
6458            ::std::option::Option<::std::string::String>,
6459            ::std::string::String,
6460        >,
6461        remarks: ::std::result::Result<
6462            ::std::option::Option<::std::string::String>,
6463            ::std::string::String,
6464        >,
6465        report_document_set_id: ::std::result::Result<
6466            ::std::option::Option<::std::string::String>,
6467            ::std::string::String,
6468        >,
6469        ultimate_project_client: ::std::result::Result<
6470            ::std::option::Option<::std::string::String>,
6471            ::std::string::String,
6472        >,
6473        ultimate_project_name: ::std::result::Result<
6474            ::std::option::Option<::std::string::String>,
6475            ::std::string::String,
6476        >,
6477    }
6478    impl ::std::default::Default for AgsProject {
6479        fn default() -> Self {
6480            Self {
6481                ags_project_code_set: Ok(Default::default()),
6482                ags_project_coordinate_system: Ok(Default::default()),
6483                ags_project_document_set: Ok(Default::default()),
6484                ags_project_investigation: Ok(Default::default()),
6485                brief_document_set_id: Ok(Default::default()),
6486                client: Ok(Default::default()),
6487                client_project_id: Ok(Default::default()),
6488                description: Ok(Default::default()),
6489                parent_project_name: Ok(Default::default()),
6490                producer: Ok(Default::default()),
6491                producer_project_id: Ok(Default::default()),
6492                producer_suppliers: Ok(Default::default()),
6493                project_country: Ok(Default::default()),
6494                project_name: Err("no value supplied for project_name".to_string()),
6495                project_uuid: Ok(Default::default()),
6496                remarks: Ok(Default::default()),
6497                report_document_set_id: Ok(Default::default()),
6498                ultimate_project_client: Ok(Default::default()),
6499                ultimate_project_name: Ok(Default::default()),
6500            }
6501        }
6502    }
6503    impl AgsProject {
6504        pub fn ags_project_code_set<T>(mut self, value: T) -> Self
6505        where
6506            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsProjectCodeSet>>,
6507            T::Error: ::std::fmt::Display,
6508        {
6509            self.ags_project_code_set = value.try_into().map_err(|e| {
6510                format!(
6511                    "error converting supplied value for ags_project_code_set: {}",
6512                    e
6513                )
6514            });
6515            self
6516        }
6517        pub fn ags_project_coordinate_system<T>(mut self, value: T) -> Self
6518        where
6519            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsProjectCoordinateSystem>>,
6520            T::Error: ::std::fmt::Display,
6521        {
6522            self.ags_project_coordinate_system = value.try_into().map_err(|e| {
6523                format!(
6524                    "error converting supplied value for ags_project_coordinate_system: {}",
6525                    e
6526                )
6527            });
6528            self
6529        }
6530        pub fn ags_project_document_set<T>(mut self, value: T) -> Self
6531        where
6532            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsProjectDocumentSet>>,
6533            T::Error: ::std::fmt::Display,
6534        {
6535            self.ags_project_document_set = value.try_into().map_err(|e| {
6536                format!(
6537                    "error converting supplied value for ags_project_document_set: {}",
6538                    e
6539                )
6540            });
6541            self
6542        }
6543        pub fn ags_project_investigation<T>(mut self, value: T) -> Self
6544        where
6545            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsProjectInvestigation>>,
6546            T::Error: ::std::fmt::Display,
6547        {
6548            self.ags_project_investigation = value.try_into().map_err(|e| {
6549                format!(
6550                    "error converting supplied value for ags_project_investigation: {}",
6551                    e
6552                )
6553            });
6554            self
6555        }
6556        pub fn brief_document_set_id<T>(mut self, value: T) -> Self
6557        where
6558            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6559            T::Error: ::std::fmt::Display,
6560        {
6561            self.brief_document_set_id = value.try_into().map_err(|e| {
6562                format!(
6563                    "error converting supplied value for brief_document_set_id: {}",
6564                    e
6565                )
6566            });
6567            self
6568        }
6569        pub fn client<T>(mut self, value: T) -> Self
6570        where
6571            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6572            T::Error: ::std::fmt::Display,
6573        {
6574            self.client = value
6575                .try_into()
6576                .map_err(|e| format!("error converting supplied value for client: {}", e));
6577            self
6578        }
6579        pub fn client_project_id<T>(mut self, value: T) -> Self
6580        where
6581            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6582            T::Error: ::std::fmt::Display,
6583        {
6584            self.client_project_id = value.try_into().map_err(|e| {
6585                format!(
6586                    "error converting supplied value for client_project_id: {}",
6587                    e
6588                )
6589            });
6590            self
6591        }
6592        pub fn description<T>(mut self, value: T) -> Self
6593        where
6594            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6595            T::Error: ::std::fmt::Display,
6596        {
6597            self.description = value
6598                .try_into()
6599                .map_err(|e| format!("error converting supplied value for description: {}", e));
6600            self
6601        }
6602        pub fn parent_project_name<T>(mut self, value: T) -> Self
6603        where
6604            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6605            T::Error: ::std::fmt::Display,
6606        {
6607            self.parent_project_name = value.try_into().map_err(|e| {
6608                format!(
6609                    "error converting supplied value for parent_project_name: {}",
6610                    e
6611                )
6612            });
6613            self
6614        }
6615        pub fn producer<T>(mut self, value: T) -> Self
6616        where
6617            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6618            T::Error: ::std::fmt::Display,
6619        {
6620            self.producer = value
6621                .try_into()
6622                .map_err(|e| format!("error converting supplied value for producer: {}", e));
6623            self
6624        }
6625        pub fn producer_project_id<T>(mut self, value: T) -> Self
6626        where
6627            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6628            T::Error: ::std::fmt::Display,
6629        {
6630            self.producer_project_id = value.try_into().map_err(|e| {
6631                format!(
6632                    "error converting supplied value for producer_project_id: {}",
6633                    e
6634                )
6635            });
6636            self
6637        }
6638        pub fn producer_suppliers<T>(mut self, value: T) -> Self
6639        where
6640            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6641            T::Error: ::std::fmt::Display,
6642        {
6643            self.producer_suppliers = value.try_into().map_err(|e| {
6644                format!(
6645                    "error converting supplied value for producer_suppliers: {}",
6646                    e
6647                )
6648            });
6649            self
6650        }
6651        pub fn project_country<T>(mut self, value: T) -> Self
6652        where
6653            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6654            T::Error: ::std::fmt::Display,
6655        {
6656            self.project_country = value
6657                .try_into()
6658                .map_err(|e| format!("error converting supplied value for project_country: {}", e));
6659            self
6660        }
6661        pub fn project_name<T>(mut self, value: T) -> Self
6662        where
6663            T: ::std::convert::TryInto<super::AgsProjectProjectName>,
6664            T::Error: ::std::fmt::Display,
6665        {
6666            self.project_name = value
6667                .try_into()
6668                .map_err(|e| format!("error converting supplied value for project_name: {}", e));
6669            self
6670        }
6671        pub fn project_uuid<T>(mut self, value: T) -> Self
6672        where
6673            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6674            T::Error: ::std::fmt::Display,
6675        {
6676            self.project_uuid = value
6677                .try_into()
6678                .map_err(|e| format!("error converting supplied value for project_uuid: {}", e));
6679            self
6680        }
6681        pub fn remarks<T>(mut self, value: T) -> Self
6682        where
6683            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6684            T::Error: ::std::fmt::Display,
6685        {
6686            self.remarks = value
6687                .try_into()
6688                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
6689            self
6690        }
6691        pub fn report_document_set_id<T>(mut self, value: T) -> Self
6692        where
6693            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6694            T::Error: ::std::fmt::Display,
6695        {
6696            self.report_document_set_id = value.try_into().map_err(|e| {
6697                format!(
6698                    "error converting supplied value for report_document_set_id: {}",
6699                    e
6700                )
6701            });
6702            self
6703        }
6704        pub fn ultimate_project_client<T>(mut self, value: T) -> Self
6705        where
6706            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6707            T::Error: ::std::fmt::Display,
6708        {
6709            self.ultimate_project_client = value.try_into().map_err(|e| {
6710                format!(
6711                    "error converting supplied value for ultimate_project_client: {}",
6712                    e
6713                )
6714            });
6715            self
6716        }
6717        pub fn ultimate_project_name<T>(mut self, value: T) -> Self
6718        where
6719            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6720            T::Error: ::std::fmt::Display,
6721        {
6722            self.ultimate_project_name = value.try_into().map_err(|e| {
6723                format!(
6724                    "error converting supplied value for ultimate_project_name: {}",
6725                    e
6726                )
6727            });
6728            self
6729        }
6730    }
6731    impl ::std::convert::TryFrom<AgsProject> for super::AgsProject {
6732        type Error = super::error::ConversionError;
6733        fn try_from(
6734            value: AgsProject,
6735        ) -> ::std::result::Result<Self, super::error::ConversionError> {
6736            Ok(Self {
6737                ags_project_code_set: value.ags_project_code_set?,
6738                ags_project_coordinate_system: value.ags_project_coordinate_system?,
6739                ags_project_document_set: value.ags_project_document_set?,
6740                ags_project_investigation: value.ags_project_investigation?,
6741                brief_document_set_id: value.brief_document_set_id?,
6742                client: value.client?,
6743                client_project_id: value.client_project_id?,
6744                description: value.description?,
6745                parent_project_name: value.parent_project_name?,
6746                producer: value.producer?,
6747                producer_project_id: value.producer_project_id?,
6748                producer_suppliers: value.producer_suppliers?,
6749                project_country: value.project_country?,
6750                project_name: value.project_name?,
6751                project_uuid: value.project_uuid?,
6752                remarks: value.remarks?,
6753                report_document_set_id: value.report_document_set_id?,
6754                ultimate_project_client: value.ultimate_project_client?,
6755                ultimate_project_name: value.ultimate_project_name?,
6756            })
6757        }
6758    }
6759    impl ::std::convert::From<super::AgsProject> for AgsProject {
6760        fn from(value: super::AgsProject) -> Self {
6761            Self {
6762                ags_project_code_set: Ok(value.ags_project_code_set),
6763                ags_project_coordinate_system: Ok(value.ags_project_coordinate_system),
6764                ags_project_document_set: Ok(value.ags_project_document_set),
6765                ags_project_investigation: Ok(value.ags_project_investigation),
6766                brief_document_set_id: Ok(value.brief_document_set_id),
6767                client: Ok(value.client),
6768                client_project_id: Ok(value.client_project_id),
6769                description: Ok(value.description),
6770                parent_project_name: Ok(value.parent_project_name),
6771                producer: Ok(value.producer),
6772                producer_project_id: Ok(value.producer_project_id),
6773                producer_suppliers: Ok(value.producer_suppliers),
6774                project_country: Ok(value.project_country),
6775                project_name: Ok(value.project_name),
6776                project_uuid: Ok(value.project_uuid),
6777                remarks: Ok(value.remarks),
6778                report_document_set_id: Ok(value.report_document_set_id),
6779                ultimate_project_client: Ok(value.ultimate_project_client),
6780                ultimate_project_name: Ok(value.ultimate_project_name),
6781            }
6782        }
6783    }
6784    #[derive(Clone, Debug)]
6785    pub struct AgsProjectCode {
6786        code_id: ::std::result::Result<super::AgsProjectCodeCodeId, ::std::string::String>,
6787        description: ::std::result::Result<super::AgsProjectCodeDescription, ::std::string::String>,
6788        is_standard: ::std::result::Result<::std::option::Option<bool>, ::std::string::String>,
6789        remarks: ::std::result::Result<
6790            ::std::option::Option<::std::string::String>,
6791            ::std::string::String,
6792        >,
6793        units: ::std::result::Result<
6794            ::std::option::Option<::std::string::String>,
6795            ::std::string::String,
6796        >,
6797    }
6798    impl ::std::default::Default for AgsProjectCode {
6799        fn default() -> Self {
6800            Self {
6801                code_id: Err("no value supplied for code_id".to_string()),
6802                description: Err("no value supplied for description".to_string()),
6803                is_standard: Ok(Default::default()),
6804                remarks: Ok(Default::default()),
6805                units: Ok(Default::default()),
6806            }
6807        }
6808    }
6809    impl AgsProjectCode {
6810        pub fn code_id<T>(mut self, value: T) -> Self
6811        where
6812            T: ::std::convert::TryInto<super::AgsProjectCodeCodeId>,
6813            T::Error: ::std::fmt::Display,
6814        {
6815            self.code_id = value
6816                .try_into()
6817                .map_err(|e| format!("error converting supplied value for code_id: {}", e));
6818            self
6819        }
6820        pub fn description<T>(mut self, value: T) -> Self
6821        where
6822            T: ::std::convert::TryInto<super::AgsProjectCodeDescription>,
6823            T::Error: ::std::fmt::Display,
6824        {
6825            self.description = value
6826                .try_into()
6827                .map_err(|e| format!("error converting supplied value for description: {}", e));
6828            self
6829        }
6830        pub fn is_standard<T>(mut self, value: T) -> Self
6831        where
6832            T: ::std::convert::TryInto<::std::option::Option<bool>>,
6833            T::Error: ::std::fmt::Display,
6834        {
6835            self.is_standard = value
6836                .try_into()
6837                .map_err(|e| format!("error converting supplied value for is_standard: {}", e));
6838            self
6839        }
6840        pub fn remarks<T>(mut self, value: T) -> Self
6841        where
6842            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6843            T::Error: ::std::fmt::Display,
6844        {
6845            self.remarks = value
6846                .try_into()
6847                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
6848            self
6849        }
6850        pub fn units<T>(mut self, value: T) -> Self
6851        where
6852            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6853            T::Error: ::std::fmt::Display,
6854        {
6855            self.units = value
6856                .try_into()
6857                .map_err(|e| format!("error converting supplied value for units: {}", e));
6858            self
6859        }
6860    }
6861    impl ::std::convert::TryFrom<AgsProjectCode> for super::AgsProjectCode {
6862        type Error = super::error::ConversionError;
6863        fn try_from(
6864            value: AgsProjectCode,
6865        ) -> ::std::result::Result<Self, super::error::ConversionError> {
6866            Ok(Self {
6867                code_id: value.code_id?,
6868                description: value.description?,
6869                is_standard: value.is_standard?,
6870                remarks: value.remarks?,
6871                units: value.units?,
6872            })
6873        }
6874    }
6875    impl ::std::convert::From<super::AgsProjectCode> for AgsProjectCode {
6876        fn from(value: super::AgsProjectCode) -> Self {
6877            Self {
6878                code_id: Ok(value.code_id),
6879                description: Ok(value.description),
6880                is_standard: Ok(value.is_standard),
6881                remarks: Ok(value.remarks),
6882                units: Ok(value.units),
6883            }
6884        }
6885    }
6886    #[derive(Clone, Debug)]
6887    pub struct AgsProjectCodeSet {
6888        ags_project_code:
6889            ::std::result::Result<::std::vec::Vec<super::AgsProjectCode>, ::std::string::String>,
6890        code_set_id: ::std::result::Result<
6891            ::std::option::Option<::std::string::String>,
6892            ::std::string::String,
6893        >,
6894        concatenation_allow:
6895            ::std::result::Result<::std::option::Option<bool>, ::std::string::String>,
6896        concatenation_character: ::std::result::Result<
6897            ::std::option::Option<::std::string::String>,
6898            ::std::string::String,
6899        >,
6900        description: ::std::result::Result<
6901            ::std::option::Option<::std::string::String>,
6902            ::std::string::String,
6903        >,
6904        remarks: ::std::result::Result<
6905            ::std::option::Option<::std::string::String>,
6906            ::std::string::String,
6907        >,
6908        source_description: ::std::result::Result<
6909            ::std::option::Option<::std::string::String>,
6910            ::std::string::String,
6911        >,
6912        source_uri: ::std::result::Result<
6913            ::std::option::Option<::std::string::String>,
6914            ::std::string::String,
6915        >,
6916        used_by_attribute:
6917            ::std::result::Result<super::AgsProjectCodeSetUsedByAttribute, ::std::string::String>,
6918        used_by_object:
6919            ::std::result::Result<super::AgsProjectCodeSetUsedByObject, ::std::string::String>,
6920    }
6921    impl ::std::default::Default for AgsProjectCodeSet {
6922        fn default() -> Self {
6923            Self {
6924                ags_project_code: Ok(Default::default()),
6925                code_set_id: Ok(Default::default()),
6926                concatenation_allow: Ok(Default::default()),
6927                concatenation_character: Ok(Default::default()),
6928                description: Ok(Default::default()),
6929                remarks: Ok(Default::default()),
6930                source_description: Ok(Default::default()),
6931                source_uri: Ok(Default::default()),
6932                used_by_attribute: Err("no value supplied for used_by_attribute".to_string()),
6933                used_by_object: Err("no value supplied for used_by_object".to_string()),
6934            }
6935        }
6936    }
6937    impl AgsProjectCodeSet {
6938        pub fn ags_project_code<T>(mut self, value: T) -> Self
6939        where
6940            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsProjectCode>>,
6941            T::Error: ::std::fmt::Display,
6942        {
6943            self.ags_project_code = value.try_into().map_err(|e| {
6944                format!(
6945                    "error converting supplied value for ags_project_code: {}",
6946                    e
6947                )
6948            });
6949            self
6950        }
6951        pub fn code_set_id<T>(mut self, value: T) -> Self
6952        where
6953            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6954            T::Error: ::std::fmt::Display,
6955        {
6956            self.code_set_id = value
6957                .try_into()
6958                .map_err(|e| format!("error converting supplied value for code_set_id: {}", e));
6959            self
6960        }
6961        pub fn concatenation_allow<T>(mut self, value: T) -> Self
6962        where
6963            T: ::std::convert::TryInto<::std::option::Option<bool>>,
6964            T::Error: ::std::fmt::Display,
6965        {
6966            self.concatenation_allow = value.try_into().map_err(|e| {
6967                format!(
6968                    "error converting supplied value for concatenation_allow: {}",
6969                    e
6970                )
6971            });
6972            self
6973        }
6974        pub fn concatenation_character<T>(mut self, value: T) -> Self
6975        where
6976            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6977            T::Error: ::std::fmt::Display,
6978        {
6979            self.concatenation_character = value.try_into().map_err(|e| {
6980                format!(
6981                    "error converting supplied value for concatenation_character: {}",
6982                    e
6983                )
6984            });
6985            self
6986        }
6987        pub fn description<T>(mut self, value: T) -> Self
6988        where
6989            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
6990            T::Error: ::std::fmt::Display,
6991        {
6992            self.description = value
6993                .try_into()
6994                .map_err(|e| format!("error converting supplied value for description: {}", e));
6995            self
6996        }
6997        pub fn remarks<T>(mut self, value: T) -> Self
6998        where
6999            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7000            T::Error: ::std::fmt::Display,
7001        {
7002            self.remarks = value
7003                .try_into()
7004                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
7005            self
7006        }
7007        pub fn source_description<T>(mut self, value: T) -> Self
7008        where
7009            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7010            T::Error: ::std::fmt::Display,
7011        {
7012            self.source_description = value.try_into().map_err(|e| {
7013                format!(
7014                    "error converting supplied value for source_description: {}",
7015                    e
7016                )
7017            });
7018            self
7019        }
7020        pub fn source_uri<T>(mut self, value: T) -> Self
7021        where
7022            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7023            T::Error: ::std::fmt::Display,
7024        {
7025            self.source_uri = value
7026                .try_into()
7027                .map_err(|e| format!("error converting supplied value for source_uri: {}", e));
7028            self
7029        }
7030        pub fn used_by_attribute<T>(mut self, value: T) -> Self
7031        where
7032            T: ::std::convert::TryInto<super::AgsProjectCodeSetUsedByAttribute>,
7033            T::Error: ::std::fmt::Display,
7034        {
7035            self.used_by_attribute = value.try_into().map_err(|e| {
7036                format!(
7037                    "error converting supplied value for used_by_attribute: {}",
7038                    e
7039                )
7040            });
7041            self
7042        }
7043        pub fn used_by_object<T>(mut self, value: T) -> Self
7044        where
7045            T: ::std::convert::TryInto<super::AgsProjectCodeSetUsedByObject>,
7046            T::Error: ::std::fmt::Display,
7047        {
7048            self.used_by_object = value
7049                .try_into()
7050                .map_err(|e| format!("error converting supplied value for used_by_object: {}", e));
7051            self
7052        }
7053    }
7054    impl ::std::convert::TryFrom<AgsProjectCodeSet> for super::AgsProjectCodeSet {
7055        type Error = super::error::ConversionError;
7056        fn try_from(
7057            value: AgsProjectCodeSet,
7058        ) -> ::std::result::Result<Self, super::error::ConversionError> {
7059            Ok(Self {
7060                ags_project_code: value.ags_project_code?,
7061                code_set_id: value.code_set_id?,
7062                concatenation_allow: value.concatenation_allow?,
7063                concatenation_character: value.concatenation_character?,
7064                description: value.description?,
7065                remarks: value.remarks?,
7066                source_description: value.source_description?,
7067                source_uri: value.source_uri?,
7068                used_by_attribute: value.used_by_attribute?,
7069                used_by_object: value.used_by_object?,
7070            })
7071        }
7072    }
7073    impl ::std::convert::From<super::AgsProjectCodeSet> for AgsProjectCodeSet {
7074        fn from(value: super::AgsProjectCodeSet) -> Self {
7075            Self {
7076                ags_project_code: Ok(value.ags_project_code),
7077                code_set_id: Ok(value.code_set_id),
7078                concatenation_allow: Ok(value.concatenation_allow),
7079                concatenation_character: Ok(value.concatenation_character),
7080                description: Ok(value.description),
7081                remarks: Ok(value.remarks),
7082                source_description: Ok(value.source_description),
7083                source_uri: Ok(value.source_uri),
7084                used_by_attribute: Ok(value.used_by_attribute),
7085                used_by_object: Ok(value.used_by_object),
7086            }
7087        }
7088    }
7089    #[derive(Clone, Debug)]
7090    pub struct AgsProjectCoordinateSystem {
7091        axis_name_x: ::std::result::Result<
7092            ::std::option::Option<::std::string::String>,
7093            ::std::string::String,
7094        >,
7095        axis_name_y: ::std::result::Result<
7096            ::std::option::Option<::std::string::String>,
7097            ::std::string::String,
7098        >,
7099        axis_name_z: ::std::result::Result<
7100            ::std::option::Option<::std::string::String>,
7101            ::std::string::String,
7102        >,
7103        axis_units_xy: ::std::result::Result<
7104            super::AgsProjectCoordinateSystemAxisUnitsXy,
7105            ::std::string::String,
7106        >,
7107        axis_units_z: ::std::result::Result<
7108            super::AgsProjectCoordinateSystemAxisUnitsZ,
7109            ::std::string::String,
7110        >,
7111        description: ::std::result::Result<
7112            ::std::option::Option<::std::string::String>,
7113            ::std::string::String,
7114        >,
7115        global_xy_system: ::std::result::Result<
7116            ::std::option::Option<::std::string::String>,
7117            ::std::string::String,
7118        >,
7119        global_z_system: ::std::result::Result<
7120            ::std::option::Option<::std::string::String>,
7121            ::std::string::String,
7122        >,
7123        remarks: ::std::result::Result<
7124            ::std::option::Option<::std::string::String>,
7125            ::std::string::String,
7126        >,
7127        system_id: ::std::result::Result<
7128            ::std::option::Option<::std::string::String>,
7129            ::std::string::String,
7130        >,
7131        system_name_xy: ::std::result::Result<
7132            ::std::option::Option<::std::string::String>,
7133            ::std::string::String,
7134        >,
7135        system_name_z: ::std::result::Result<
7136            ::std::option::Option<::std::string::String>,
7137            ::std::string::String,
7138        >,
7139        system_type: ::std::result::Result<
7140            ::std::option::Option<super::AgsProjectCoordinateSystemSystemType>,
7141            ::std::string::String,
7142        >,
7143        transform_shift_x: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
7144        transform_shift_y: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
7145        transform_shift_z: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
7146        transform_xy_rotation:
7147            ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
7148        transform_xy_scale_factor:
7149            ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
7150    }
7151    impl ::std::default::Default for AgsProjectCoordinateSystem {
7152        fn default() -> Self {
7153            Self {
7154                axis_name_x: Ok(Default::default()),
7155                axis_name_y: Ok(Default::default()),
7156                axis_name_z: Ok(Default::default()),
7157                axis_units_xy: Err("no value supplied for axis_units_xy".to_string()),
7158                axis_units_z: Err("no value supplied for axis_units_z".to_string()),
7159                description: Ok(Default::default()),
7160                global_xy_system: Ok(Default::default()),
7161                global_z_system: Ok(Default::default()),
7162                remarks: Ok(Default::default()),
7163                system_id: Ok(Default::default()),
7164                system_name_xy: Ok(Default::default()),
7165                system_name_z: Ok(Default::default()),
7166                system_type: Ok(Default::default()),
7167                transform_shift_x: Ok(Default::default()),
7168                transform_shift_y: Ok(Default::default()),
7169                transform_shift_z: Ok(Default::default()),
7170                transform_xy_rotation: Ok(Default::default()),
7171                transform_xy_scale_factor: Ok(Default::default()),
7172            }
7173        }
7174    }
7175    impl AgsProjectCoordinateSystem {
7176        pub fn axis_name_x<T>(mut self, value: T) -> Self
7177        where
7178            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7179            T::Error: ::std::fmt::Display,
7180        {
7181            self.axis_name_x = value
7182                .try_into()
7183                .map_err(|e| format!("error converting supplied value for axis_name_x: {}", e));
7184            self
7185        }
7186        pub fn axis_name_y<T>(mut self, value: T) -> Self
7187        where
7188            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7189            T::Error: ::std::fmt::Display,
7190        {
7191            self.axis_name_y = value
7192                .try_into()
7193                .map_err(|e| format!("error converting supplied value for axis_name_y: {}", e));
7194            self
7195        }
7196        pub fn axis_name_z<T>(mut self, value: T) -> Self
7197        where
7198            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7199            T::Error: ::std::fmt::Display,
7200        {
7201            self.axis_name_z = value
7202                .try_into()
7203                .map_err(|e| format!("error converting supplied value for axis_name_z: {}", e));
7204            self
7205        }
7206        pub fn axis_units_xy<T>(mut self, value: T) -> Self
7207        where
7208            T: ::std::convert::TryInto<super::AgsProjectCoordinateSystemAxisUnitsXy>,
7209            T::Error: ::std::fmt::Display,
7210        {
7211            self.axis_units_xy = value
7212                .try_into()
7213                .map_err(|e| format!("error converting supplied value for axis_units_xy: {}", e));
7214            self
7215        }
7216        pub fn axis_units_z<T>(mut self, value: T) -> Self
7217        where
7218            T: ::std::convert::TryInto<super::AgsProjectCoordinateSystemAxisUnitsZ>,
7219            T::Error: ::std::fmt::Display,
7220        {
7221            self.axis_units_z = value
7222                .try_into()
7223                .map_err(|e| format!("error converting supplied value for axis_units_z: {}", e));
7224            self
7225        }
7226        pub fn description<T>(mut self, value: T) -> Self
7227        where
7228            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7229            T::Error: ::std::fmt::Display,
7230        {
7231            self.description = value
7232                .try_into()
7233                .map_err(|e| format!("error converting supplied value for description: {}", e));
7234            self
7235        }
7236        pub fn global_xy_system<T>(mut self, value: T) -> Self
7237        where
7238            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7239            T::Error: ::std::fmt::Display,
7240        {
7241            self.global_xy_system = value.try_into().map_err(|e| {
7242                format!(
7243                    "error converting supplied value for global_xy_system: {}",
7244                    e
7245                )
7246            });
7247            self
7248        }
7249        pub fn global_z_system<T>(mut self, value: T) -> Self
7250        where
7251            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7252            T::Error: ::std::fmt::Display,
7253        {
7254            self.global_z_system = value
7255                .try_into()
7256                .map_err(|e| format!("error converting supplied value for global_z_system: {}", e));
7257            self
7258        }
7259        pub fn remarks<T>(mut self, value: T) -> Self
7260        where
7261            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7262            T::Error: ::std::fmt::Display,
7263        {
7264            self.remarks = value
7265                .try_into()
7266                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
7267            self
7268        }
7269        pub fn system_id<T>(mut self, value: T) -> Self
7270        where
7271            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7272            T::Error: ::std::fmt::Display,
7273        {
7274            self.system_id = value
7275                .try_into()
7276                .map_err(|e| format!("error converting supplied value for system_id: {}", e));
7277            self
7278        }
7279        pub fn system_name_xy<T>(mut self, value: T) -> Self
7280        where
7281            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7282            T::Error: ::std::fmt::Display,
7283        {
7284            self.system_name_xy = value
7285                .try_into()
7286                .map_err(|e| format!("error converting supplied value for system_name_xy: {}", e));
7287            self
7288        }
7289        pub fn system_name_z<T>(mut self, value: T) -> Self
7290        where
7291            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7292            T::Error: ::std::fmt::Display,
7293        {
7294            self.system_name_z = value
7295                .try_into()
7296                .map_err(|e| format!("error converting supplied value for system_name_z: {}", e));
7297            self
7298        }
7299        pub fn system_type<T>(mut self, value: T) -> Self
7300        where
7301            T: ::std::convert::TryInto<
7302                ::std::option::Option<super::AgsProjectCoordinateSystemSystemType>,
7303            >,
7304            T::Error: ::std::fmt::Display,
7305        {
7306            self.system_type = value
7307                .try_into()
7308                .map_err(|e| format!("error converting supplied value for system_type: {}", e));
7309            self
7310        }
7311        pub fn transform_shift_x<T>(mut self, value: T) -> Self
7312        where
7313            T: ::std::convert::TryInto<::std::option::Option<f64>>,
7314            T::Error: ::std::fmt::Display,
7315        {
7316            self.transform_shift_x = value.try_into().map_err(|e| {
7317                format!(
7318                    "error converting supplied value for transform_shift_x: {}",
7319                    e
7320                )
7321            });
7322            self
7323        }
7324        pub fn transform_shift_y<T>(mut self, value: T) -> Self
7325        where
7326            T: ::std::convert::TryInto<::std::option::Option<f64>>,
7327            T::Error: ::std::fmt::Display,
7328        {
7329            self.transform_shift_y = value.try_into().map_err(|e| {
7330                format!(
7331                    "error converting supplied value for transform_shift_y: {}",
7332                    e
7333                )
7334            });
7335            self
7336        }
7337        pub fn transform_shift_z<T>(mut self, value: T) -> Self
7338        where
7339            T: ::std::convert::TryInto<::std::option::Option<f64>>,
7340            T::Error: ::std::fmt::Display,
7341        {
7342            self.transform_shift_z = value.try_into().map_err(|e| {
7343                format!(
7344                    "error converting supplied value for transform_shift_z: {}",
7345                    e
7346                )
7347            });
7348            self
7349        }
7350        pub fn transform_xy_rotation<T>(mut self, value: T) -> Self
7351        where
7352            T: ::std::convert::TryInto<::std::option::Option<f64>>,
7353            T::Error: ::std::fmt::Display,
7354        {
7355            self.transform_xy_rotation = value.try_into().map_err(|e| {
7356                format!(
7357                    "error converting supplied value for transform_xy_rotation: {}",
7358                    e
7359                )
7360            });
7361            self
7362        }
7363        pub fn transform_xy_scale_factor<T>(mut self, value: T) -> Self
7364        where
7365            T: ::std::convert::TryInto<::std::option::Option<f64>>,
7366            T::Error: ::std::fmt::Display,
7367        {
7368            self.transform_xy_scale_factor = value.try_into().map_err(|e| {
7369                format!(
7370                    "error converting supplied value for transform_xy_scale_factor: {}",
7371                    e
7372                )
7373            });
7374            self
7375        }
7376    }
7377    impl ::std::convert::TryFrom<AgsProjectCoordinateSystem> for super::AgsProjectCoordinateSystem {
7378        type Error = super::error::ConversionError;
7379        fn try_from(
7380            value: AgsProjectCoordinateSystem,
7381        ) -> ::std::result::Result<Self, super::error::ConversionError> {
7382            Ok(Self {
7383                axis_name_x: value.axis_name_x?,
7384                axis_name_y: value.axis_name_y?,
7385                axis_name_z: value.axis_name_z?,
7386                axis_units_xy: value.axis_units_xy?,
7387                axis_units_z: value.axis_units_z?,
7388                description: value.description?,
7389                global_xy_system: value.global_xy_system?,
7390                global_z_system: value.global_z_system?,
7391                remarks: value.remarks?,
7392                system_id: value.system_id?,
7393                system_name_xy: value.system_name_xy?,
7394                system_name_z: value.system_name_z?,
7395                system_type: value.system_type?,
7396                transform_shift_x: value.transform_shift_x?,
7397                transform_shift_y: value.transform_shift_y?,
7398                transform_shift_z: value.transform_shift_z?,
7399                transform_xy_rotation: value.transform_xy_rotation?,
7400                transform_xy_scale_factor: value.transform_xy_scale_factor?,
7401            })
7402        }
7403    }
7404    impl ::std::convert::From<super::AgsProjectCoordinateSystem> for AgsProjectCoordinateSystem {
7405        fn from(value: super::AgsProjectCoordinateSystem) -> Self {
7406            Self {
7407                axis_name_x: Ok(value.axis_name_x),
7408                axis_name_y: Ok(value.axis_name_y),
7409                axis_name_z: Ok(value.axis_name_z),
7410                axis_units_xy: Ok(value.axis_units_xy),
7411                axis_units_z: Ok(value.axis_units_z),
7412                description: Ok(value.description),
7413                global_xy_system: Ok(value.global_xy_system),
7414                global_z_system: Ok(value.global_z_system),
7415                remarks: Ok(value.remarks),
7416                system_id: Ok(value.system_id),
7417                system_name_xy: Ok(value.system_name_xy),
7418                system_name_z: Ok(value.system_name_z),
7419                system_type: Ok(value.system_type),
7420                transform_shift_x: Ok(value.transform_shift_x),
7421                transform_shift_y: Ok(value.transform_shift_y),
7422                transform_shift_z: Ok(value.transform_shift_z),
7423                transform_xy_rotation: Ok(value.transform_xy_rotation),
7424                transform_xy_scale_factor: Ok(value.transform_xy_scale_factor),
7425            }
7426        }
7427    }
7428    #[derive(Clone, Debug)]
7429    pub struct AgsProjectDocument {
7430        author: ::std::result::Result<
7431            ::std::option::Option<::std::string::String>,
7432            ::std::string::String,
7433        >,
7434        client: ::std::result::Result<
7435            ::std::option::Option<::std::string::String>,
7436            ::std::string::String,
7437        >,
7438        date: ::std::result::Result<
7439            ::std::option::Option<::chrono::naive::NaiveDate>,
7440            ::std::string::String,
7441        >,
7442        description: ::std::result::Result<
7443            ::std::option::Option<::std::string::String>,
7444            ::std::string::String,
7445        >,
7446        document_id: ::std::result::Result<
7447            ::std::option::Option<::std::string::String>,
7448            ::std::string::String,
7449        >,
7450        document_system_uri: ::std::result::Result<
7451            ::std::option::Option<::std::string::String>,
7452            ::std::string::String,
7453        >,
7454        document_uri: ::std::result::Result<
7455            ::std::option::Option<::std::string::String>,
7456            ::std::string::String,
7457        >,
7458        original_reference: ::std::result::Result<
7459            ::std::option::Option<::std::string::String>,
7460            ::std::string::String,
7461        >,
7462        remarks: ::std::result::Result<
7463            ::std::option::Option<::std::string::String>,
7464            ::std::string::String,
7465        >,
7466        revision: ::std::result::Result<
7467            ::std::option::Option<::std::string::String>,
7468            ::std::string::String,
7469        >,
7470        status: ::std::result::Result<
7471            ::std::option::Option<::std::string::String>,
7472            ::std::string::String,
7473        >,
7474        status_code: ::std::result::Result<
7475            ::std::option::Option<::std::string::String>,
7476            ::std::string::String,
7477        >,
7478        system_reference: ::std::result::Result<
7479            ::std::option::Option<::std::string::String>,
7480            ::std::string::String,
7481        >,
7482        title: ::std::result::Result<
7483            ::std::option::Option<::std::string::String>,
7484            ::std::string::String,
7485        >,
7486    }
7487    impl ::std::default::Default for AgsProjectDocument {
7488        fn default() -> Self {
7489            Self {
7490                author: Ok(Default::default()),
7491                client: Ok(Default::default()),
7492                date: Ok(Default::default()),
7493                description: Ok(Default::default()),
7494                document_id: Ok(Default::default()),
7495                document_system_uri: Ok(Default::default()),
7496                document_uri: Ok(Default::default()),
7497                original_reference: Ok(Default::default()),
7498                remarks: Ok(Default::default()),
7499                revision: Ok(Default::default()),
7500                status: Ok(Default::default()),
7501                status_code: Ok(Default::default()),
7502                system_reference: Ok(Default::default()),
7503                title: Ok(Default::default()),
7504            }
7505        }
7506    }
7507    impl AgsProjectDocument {
7508        pub fn author<T>(mut self, value: T) -> Self
7509        where
7510            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7511            T::Error: ::std::fmt::Display,
7512        {
7513            self.author = value
7514                .try_into()
7515                .map_err(|e| format!("error converting supplied value for author: {}", e));
7516            self
7517        }
7518        pub fn client<T>(mut self, value: T) -> Self
7519        where
7520            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7521            T::Error: ::std::fmt::Display,
7522        {
7523            self.client = value
7524                .try_into()
7525                .map_err(|e| format!("error converting supplied value for client: {}", e));
7526            self
7527        }
7528        pub fn date<T>(mut self, value: T) -> Self
7529        where
7530            T: ::std::convert::TryInto<::std::option::Option<::chrono::naive::NaiveDate>>,
7531            T::Error: ::std::fmt::Display,
7532        {
7533            self.date = value
7534                .try_into()
7535                .map_err(|e| format!("error converting supplied value for date: {}", e));
7536            self
7537        }
7538        pub fn description<T>(mut self, value: T) -> Self
7539        where
7540            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7541            T::Error: ::std::fmt::Display,
7542        {
7543            self.description = value
7544                .try_into()
7545                .map_err(|e| format!("error converting supplied value for description: {}", e));
7546            self
7547        }
7548        pub fn document_id<T>(mut self, value: T) -> Self
7549        where
7550            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7551            T::Error: ::std::fmt::Display,
7552        {
7553            self.document_id = value
7554                .try_into()
7555                .map_err(|e| format!("error converting supplied value for document_id: {}", e));
7556            self
7557        }
7558        pub fn document_system_uri<T>(mut self, value: T) -> Self
7559        where
7560            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7561            T::Error: ::std::fmt::Display,
7562        {
7563            self.document_system_uri = value.try_into().map_err(|e| {
7564                format!(
7565                    "error converting supplied value for document_system_uri: {}",
7566                    e
7567                )
7568            });
7569            self
7570        }
7571        pub fn document_uri<T>(mut self, value: T) -> Self
7572        where
7573            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7574            T::Error: ::std::fmt::Display,
7575        {
7576            self.document_uri = value
7577                .try_into()
7578                .map_err(|e| format!("error converting supplied value for document_uri: {}", e));
7579            self
7580        }
7581        pub fn original_reference<T>(mut self, value: T) -> Self
7582        where
7583            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7584            T::Error: ::std::fmt::Display,
7585        {
7586            self.original_reference = value.try_into().map_err(|e| {
7587                format!(
7588                    "error converting supplied value for original_reference: {}",
7589                    e
7590                )
7591            });
7592            self
7593        }
7594        pub fn remarks<T>(mut self, value: T) -> Self
7595        where
7596            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7597            T::Error: ::std::fmt::Display,
7598        {
7599            self.remarks = value
7600                .try_into()
7601                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
7602            self
7603        }
7604        pub fn revision<T>(mut self, value: T) -> Self
7605        where
7606            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7607            T::Error: ::std::fmt::Display,
7608        {
7609            self.revision = value
7610                .try_into()
7611                .map_err(|e| format!("error converting supplied value for revision: {}", e));
7612            self
7613        }
7614        pub fn status<T>(mut self, value: T) -> Self
7615        where
7616            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7617            T::Error: ::std::fmt::Display,
7618        {
7619            self.status = value
7620                .try_into()
7621                .map_err(|e| format!("error converting supplied value for status: {}", e));
7622            self
7623        }
7624        pub fn status_code<T>(mut self, value: T) -> Self
7625        where
7626            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7627            T::Error: ::std::fmt::Display,
7628        {
7629            self.status_code = value
7630                .try_into()
7631                .map_err(|e| format!("error converting supplied value for status_code: {}", e));
7632            self
7633        }
7634        pub fn system_reference<T>(mut self, value: T) -> Self
7635        where
7636            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7637            T::Error: ::std::fmt::Display,
7638        {
7639            self.system_reference = value.try_into().map_err(|e| {
7640                format!(
7641                    "error converting supplied value for system_reference: {}",
7642                    e
7643                )
7644            });
7645            self
7646        }
7647        pub fn title<T>(mut self, value: T) -> Self
7648        where
7649            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7650            T::Error: ::std::fmt::Display,
7651        {
7652            self.title = value
7653                .try_into()
7654                .map_err(|e| format!("error converting supplied value for title: {}", e));
7655            self
7656        }
7657    }
7658    impl ::std::convert::TryFrom<AgsProjectDocument> for super::AgsProjectDocument {
7659        type Error = super::error::ConversionError;
7660        fn try_from(
7661            value: AgsProjectDocument,
7662        ) -> ::std::result::Result<Self, super::error::ConversionError> {
7663            Ok(Self {
7664                author: value.author?,
7665                client: value.client?,
7666                date: value.date?,
7667                description: value.description?,
7668                document_id: value.document_id?,
7669                document_system_uri: value.document_system_uri?,
7670                document_uri: value.document_uri?,
7671                original_reference: value.original_reference?,
7672                remarks: value.remarks?,
7673                revision: value.revision?,
7674                status: value.status?,
7675                status_code: value.status_code?,
7676                system_reference: value.system_reference?,
7677                title: value.title?,
7678            })
7679        }
7680    }
7681    impl ::std::convert::From<super::AgsProjectDocument> for AgsProjectDocument {
7682        fn from(value: super::AgsProjectDocument) -> Self {
7683            Self {
7684                author: Ok(value.author),
7685                client: Ok(value.client),
7686                date: Ok(value.date),
7687                description: Ok(value.description),
7688                document_id: Ok(value.document_id),
7689                document_system_uri: Ok(value.document_system_uri),
7690                document_uri: Ok(value.document_uri),
7691                original_reference: Ok(value.original_reference),
7692                remarks: Ok(value.remarks),
7693                revision: Ok(value.revision),
7694                status: Ok(value.status),
7695                status_code: Ok(value.status_code),
7696                system_reference: Ok(value.system_reference),
7697                title: Ok(value.title),
7698            }
7699        }
7700    }
7701    #[derive(Clone, Debug)]
7702    pub struct AgsProjectDocumentSet {
7703        ags_project_document: ::std::result::Result<
7704            ::std::vec::Vec<super::AgsProjectDocument>,
7705            ::std::string::String,
7706        >,
7707        description: ::std::result::Result<
7708            ::std::option::Option<::std::string::String>,
7709            ::std::string::String,
7710        >,
7711        document_set_id:
7712            ::std::result::Result<super::AgsProjectDocumentSetDocumentSetId, ::std::string::String>,
7713        remarks: ::std::result::Result<
7714            ::std::option::Option<::std::string::String>,
7715            ::std::string::String,
7716        >,
7717    }
7718    impl ::std::default::Default for AgsProjectDocumentSet {
7719        fn default() -> Self {
7720            Self {
7721                ags_project_document: Ok(Default::default()),
7722                description: Ok(Default::default()),
7723                document_set_id: Err("no value supplied for document_set_id".to_string()),
7724                remarks: Ok(Default::default()),
7725            }
7726        }
7727    }
7728    impl AgsProjectDocumentSet {
7729        pub fn ags_project_document<T>(mut self, value: T) -> Self
7730        where
7731            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsProjectDocument>>,
7732            T::Error: ::std::fmt::Display,
7733        {
7734            self.ags_project_document = value.try_into().map_err(|e| {
7735                format!(
7736                    "error converting supplied value for ags_project_document: {}",
7737                    e
7738                )
7739            });
7740            self
7741        }
7742        pub fn description<T>(mut self, value: T) -> Self
7743        where
7744            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7745            T::Error: ::std::fmt::Display,
7746        {
7747            self.description = value
7748                .try_into()
7749                .map_err(|e| format!("error converting supplied value for description: {}", e));
7750            self
7751        }
7752        pub fn document_set_id<T>(mut self, value: T) -> Self
7753        where
7754            T: ::std::convert::TryInto<super::AgsProjectDocumentSetDocumentSetId>,
7755            T::Error: ::std::fmt::Display,
7756        {
7757            self.document_set_id = value
7758                .try_into()
7759                .map_err(|e| format!("error converting supplied value for document_set_id: {}", e));
7760            self
7761        }
7762        pub fn remarks<T>(mut self, value: T) -> Self
7763        where
7764            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7765            T::Error: ::std::fmt::Display,
7766        {
7767            self.remarks = value
7768                .try_into()
7769                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
7770            self
7771        }
7772    }
7773    impl ::std::convert::TryFrom<AgsProjectDocumentSet> for super::AgsProjectDocumentSet {
7774        type Error = super::error::ConversionError;
7775        fn try_from(
7776            value: AgsProjectDocumentSet,
7777        ) -> ::std::result::Result<Self, super::error::ConversionError> {
7778            Ok(Self {
7779                ags_project_document: value.ags_project_document?,
7780                description: value.description?,
7781                document_set_id: value.document_set_id?,
7782                remarks: value.remarks?,
7783            })
7784        }
7785    }
7786    impl ::std::convert::From<super::AgsProjectDocumentSet> for AgsProjectDocumentSet {
7787        fn from(value: super::AgsProjectDocumentSet) -> Self {
7788            Self {
7789                ags_project_document: Ok(value.ags_project_document),
7790                description: Ok(value.description),
7791                document_set_id: Ok(value.document_set_id),
7792                remarks: Ok(value.remarks),
7793            }
7794        }
7795    }
7796    #[derive(Clone, Debug)]
7797    pub struct AgsProjectInvestigation {
7798        agsi_data_property_from_file: ::std::result::Result<
7799            ::std::vec::Vec<super::AgsiDataPropertyFromFile>,
7800            ::std::string::String,
7801        >,
7802        agsi_data_property_value: ::std::result::Result<
7803            ::std::vec::Vec<super::AgsiDataPropertyValue>,
7804            ::std::string::String,
7805        >,
7806        client: ::std::result::Result<
7807            ::std::option::Option<::std::string::String>,
7808            ::std::string::String,
7809        >,
7810        contractor: ::std::result::Result<
7811            ::std::option::Option<::std::string::String>,
7812            ::std::string::String,
7813        >,
7814        data_document_set_id: ::std::result::Result<
7815            ::std::option::Option<::std::string::String>,
7816            ::std::string::String,
7817        >,
7818        description: ::std::result::Result<
7819            ::std::option::Option<::std::string::String>,
7820            ::std::string::String,
7821        >,
7822        engineer: ::std::result::Result<
7823            ::std::option::Option<::std::string::String>,
7824            ::std::string::String,
7825        >,
7826        fieldwork_date_start: ::std::result::Result<
7827            ::std::option::Option<::chrono::naive::NaiveDate>,
7828            ::std::string::String,
7829        >,
7830        investigation_id: ::std::result::Result<
7831            super::AgsProjectInvestigationInvestigationId,
7832            ::std::string::String,
7833        >,
7834        investigation_name: ::std::result::Result<
7835            super::AgsProjectInvestigationInvestigationName,
7836            ::std::string::String,
7837        >,
7838        location_coordinate_global: ::std::result::Result<
7839            ::std::option::Option<super::CoordinateTuple>,
7840            ::std::string::String,
7841        >,
7842        location_coordinate_project: ::std::result::Result<
7843            ::std::option::Option<super::CoordinateTuple>,
7844            ::std::string::String,
7845        >,
7846        location_description: ::std::result::Result<
7847            ::std::option::Option<::std::string::String>,
7848            ::std::string::String,
7849        >,
7850        parent_project_name: ::std::result::Result<
7851            ::std::option::Option<::std::string::String>,
7852            ::std::string::String,
7853        >,
7854        remarks: ::std::result::Result<
7855            ::std::option::Option<::std::string::String>,
7856            ::std::string::String,
7857        >,
7858        report_document_set_id: ::std::result::Result<
7859            ::std::option::Option<::std::string::String>,
7860            ::std::string::String,
7861        >,
7862        scope_description: ::std::result::Result<
7863            ::std::option::Option<::std::string::String>,
7864            ::std::string::String,
7865        >,
7866        specification_document_set_id: ::std::result::Result<
7867            ::std::option::Option<::std::string::String>,
7868            ::std::string::String,
7869        >,
7870        subcontractors: ::std::result::Result<
7871            ::std::option::Option<::std::string::String>,
7872            ::std::string::String,
7873        >,
7874        ultimate_project_client: ::std::result::Result<
7875            ::std::option::Option<::std::string::String>,
7876            ::std::string::String,
7877        >,
7878        ultimate_project_name: ::std::result::Result<
7879            ::std::option::Option<::std::string::String>,
7880            ::std::string::String,
7881        >,
7882    }
7883    impl ::std::default::Default for AgsProjectInvestigation {
7884        fn default() -> Self {
7885            Self {
7886                agsi_data_property_from_file: Ok(Default::default()),
7887                agsi_data_property_value: Ok(Default::default()),
7888                client: Ok(Default::default()),
7889                contractor: Ok(Default::default()),
7890                data_document_set_id: Ok(Default::default()),
7891                description: Ok(Default::default()),
7892                engineer: Ok(Default::default()),
7893                fieldwork_date_start: Ok(Default::default()),
7894                investigation_id: Err("no value supplied for investigation_id".to_string()),
7895                investigation_name: Err("no value supplied for investigation_name".to_string()),
7896                location_coordinate_global: Ok(Default::default()),
7897                location_coordinate_project: Ok(Default::default()),
7898                location_description: Ok(Default::default()),
7899                parent_project_name: Ok(Default::default()),
7900                remarks: Ok(Default::default()),
7901                report_document_set_id: Ok(Default::default()),
7902                scope_description: Ok(Default::default()),
7903                specification_document_set_id: Ok(Default::default()),
7904                subcontractors: Ok(Default::default()),
7905                ultimate_project_client: Ok(Default::default()),
7906                ultimate_project_name: Ok(Default::default()),
7907            }
7908        }
7909    }
7910    impl AgsProjectInvestigation {
7911        pub fn agsi_data_property_from_file<T>(mut self, value: T) -> Self
7912        where
7913            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataPropertyFromFile>>,
7914            T::Error: ::std::fmt::Display,
7915        {
7916            self.agsi_data_property_from_file = value.try_into().map_err(|e| {
7917                format!(
7918                    "error converting supplied value for agsi_data_property_from_file: {}",
7919                    e
7920                )
7921            });
7922            self
7923        }
7924        pub fn agsi_data_property_value<T>(mut self, value: T) -> Self
7925        where
7926            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataPropertyValue>>,
7927            T::Error: ::std::fmt::Display,
7928        {
7929            self.agsi_data_property_value = value.try_into().map_err(|e| {
7930                format!(
7931                    "error converting supplied value for agsi_data_property_value: {}",
7932                    e
7933                )
7934            });
7935            self
7936        }
7937        pub fn client<T>(mut self, value: T) -> Self
7938        where
7939            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7940            T::Error: ::std::fmt::Display,
7941        {
7942            self.client = value
7943                .try_into()
7944                .map_err(|e| format!("error converting supplied value for client: {}", e));
7945            self
7946        }
7947        pub fn contractor<T>(mut self, value: T) -> Self
7948        where
7949            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7950            T::Error: ::std::fmt::Display,
7951        {
7952            self.contractor = value
7953                .try_into()
7954                .map_err(|e| format!("error converting supplied value for contractor: {}", e));
7955            self
7956        }
7957        pub fn data_document_set_id<T>(mut self, value: T) -> Self
7958        where
7959            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7960            T::Error: ::std::fmt::Display,
7961        {
7962            self.data_document_set_id = value.try_into().map_err(|e| {
7963                format!(
7964                    "error converting supplied value for data_document_set_id: {}",
7965                    e
7966                )
7967            });
7968            self
7969        }
7970        pub fn description<T>(mut self, value: T) -> Self
7971        where
7972            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7973            T::Error: ::std::fmt::Display,
7974        {
7975            self.description = value
7976                .try_into()
7977                .map_err(|e| format!("error converting supplied value for description: {}", e));
7978            self
7979        }
7980        pub fn engineer<T>(mut self, value: T) -> Self
7981        where
7982            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
7983            T::Error: ::std::fmt::Display,
7984        {
7985            self.engineer = value
7986                .try_into()
7987                .map_err(|e| format!("error converting supplied value for engineer: {}", e));
7988            self
7989        }
7990        pub fn fieldwork_date_start<T>(mut self, value: T) -> Self
7991        where
7992            T: ::std::convert::TryInto<::std::option::Option<::chrono::naive::NaiveDate>>,
7993            T::Error: ::std::fmt::Display,
7994        {
7995            self.fieldwork_date_start = value.try_into().map_err(|e| {
7996                format!(
7997                    "error converting supplied value for fieldwork_date_start: {}",
7998                    e
7999                )
8000            });
8001            self
8002        }
8003        pub fn investigation_id<T>(mut self, value: T) -> Self
8004        where
8005            T: ::std::convert::TryInto<super::AgsProjectInvestigationInvestigationId>,
8006            T::Error: ::std::fmt::Display,
8007        {
8008            self.investigation_id = value.try_into().map_err(|e| {
8009                format!(
8010                    "error converting supplied value for investigation_id: {}",
8011                    e
8012                )
8013            });
8014            self
8015        }
8016        pub fn investigation_name<T>(mut self, value: T) -> Self
8017        where
8018            T: ::std::convert::TryInto<super::AgsProjectInvestigationInvestigationName>,
8019            T::Error: ::std::fmt::Display,
8020        {
8021            self.investigation_name = value.try_into().map_err(|e| {
8022                format!(
8023                    "error converting supplied value for investigation_name: {}",
8024                    e
8025                )
8026            });
8027            self
8028        }
8029        pub fn location_coordinate_global<T>(mut self, value: T) -> Self
8030        where
8031            T: ::std::convert::TryInto<::std::option::Option<super::CoordinateTuple>>,
8032            T::Error: ::std::fmt::Display,
8033        {
8034            self.location_coordinate_global = value.try_into().map_err(|e| {
8035                format!(
8036                    "error converting supplied value for location_coordinate_global: {}",
8037                    e
8038                )
8039            });
8040            self
8041        }
8042        pub fn location_coordinate_project<T>(mut self, value: T) -> Self
8043        where
8044            T: ::std::convert::TryInto<::std::option::Option<super::CoordinateTuple>>,
8045            T::Error: ::std::fmt::Display,
8046        {
8047            self.location_coordinate_project = value.try_into().map_err(|e| {
8048                format!(
8049                    "error converting supplied value for location_coordinate_project: {}",
8050                    e
8051                )
8052            });
8053            self
8054        }
8055        pub fn location_description<T>(mut self, value: T) -> Self
8056        where
8057            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8058            T::Error: ::std::fmt::Display,
8059        {
8060            self.location_description = value.try_into().map_err(|e| {
8061                format!(
8062                    "error converting supplied value for location_description: {}",
8063                    e
8064                )
8065            });
8066            self
8067        }
8068        pub fn parent_project_name<T>(mut self, value: T) -> Self
8069        where
8070            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8071            T::Error: ::std::fmt::Display,
8072        {
8073            self.parent_project_name = value.try_into().map_err(|e| {
8074                format!(
8075                    "error converting supplied value for parent_project_name: {}",
8076                    e
8077                )
8078            });
8079            self
8080        }
8081        pub fn remarks<T>(mut self, value: T) -> Self
8082        where
8083            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8084            T::Error: ::std::fmt::Display,
8085        {
8086            self.remarks = value
8087                .try_into()
8088                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
8089            self
8090        }
8091        pub fn report_document_set_id<T>(mut self, value: T) -> Self
8092        where
8093            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8094            T::Error: ::std::fmt::Display,
8095        {
8096            self.report_document_set_id = value.try_into().map_err(|e| {
8097                format!(
8098                    "error converting supplied value for report_document_set_id: {}",
8099                    e
8100                )
8101            });
8102            self
8103        }
8104        pub fn scope_description<T>(mut self, value: T) -> Self
8105        where
8106            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8107            T::Error: ::std::fmt::Display,
8108        {
8109            self.scope_description = value.try_into().map_err(|e| {
8110                format!(
8111                    "error converting supplied value for scope_description: {}",
8112                    e
8113                )
8114            });
8115            self
8116        }
8117        pub fn specification_document_set_id<T>(mut self, value: T) -> Self
8118        where
8119            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8120            T::Error: ::std::fmt::Display,
8121        {
8122            self.specification_document_set_id = value.try_into().map_err(|e| {
8123                format!(
8124                    "error converting supplied value for specification_document_set_id: {}",
8125                    e
8126                )
8127            });
8128            self
8129        }
8130        pub fn subcontractors<T>(mut self, value: T) -> Self
8131        where
8132            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8133            T::Error: ::std::fmt::Display,
8134        {
8135            self.subcontractors = value
8136                .try_into()
8137                .map_err(|e| format!("error converting supplied value for subcontractors: {}", e));
8138            self
8139        }
8140        pub fn ultimate_project_client<T>(mut self, value: T) -> Self
8141        where
8142            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8143            T::Error: ::std::fmt::Display,
8144        {
8145            self.ultimate_project_client = value.try_into().map_err(|e| {
8146                format!(
8147                    "error converting supplied value for ultimate_project_client: {}",
8148                    e
8149                )
8150            });
8151            self
8152        }
8153        pub fn ultimate_project_name<T>(mut self, value: T) -> Self
8154        where
8155            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8156            T::Error: ::std::fmt::Display,
8157        {
8158            self.ultimate_project_name = value.try_into().map_err(|e| {
8159                format!(
8160                    "error converting supplied value for ultimate_project_name: {}",
8161                    e
8162                )
8163            });
8164            self
8165        }
8166    }
8167    impl ::std::convert::TryFrom<AgsProjectInvestigation> for super::AgsProjectInvestigation {
8168        type Error = super::error::ConversionError;
8169        fn try_from(
8170            value: AgsProjectInvestigation,
8171        ) -> ::std::result::Result<Self, super::error::ConversionError> {
8172            Ok(Self {
8173                agsi_data_property_from_file: value.agsi_data_property_from_file?,
8174                agsi_data_property_value: value.agsi_data_property_value?,
8175                client: value.client?,
8176                contractor: value.contractor?,
8177                data_document_set_id: value.data_document_set_id?,
8178                description: value.description?,
8179                engineer: value.engineer?,
8180                fieldwork_date_start: value.fieldwork_date_start?,
8181                investigation_id: value.investigation_id?,
8182                investigation_name: value.investigation_name?,
8183                location_coordinate_global: value.location_coordinate_global?,
8184                location_coordinate_project: value.location_coordinate_project?,
8185                location_description: value.location_description?,
8186                parent_project_name: value.parent_project_name?,
8187                remarks: value.remarks?,
8188                report_document_set_id: value.report_document_set_id?,
8189                scope_description: value.scope_description?,
8190                specification_document_set_id: value.specification_document_set_id?,
8191                subcontractors: value.subcontractors?,
8192                ultimate_project_client: value.ultimate_project_client?,
8193                ultimate_project_name: value.ultimate_project_name?,
8194            })
8195        }
8196    }
8197    impl ::std::convert::From<super::AgsProjectInvestigation> for AgsProjectInvestigation {
8198        fn from(value: super::AgsProjectInvestigation) -> Self {
8199            Self {
8200                agsi_data_property_from_file: Ok(value.agsi_data_property_from_file),
8201                agsi_data_property_value: Ok(value.agsi_data_property_value),
8202                client: Ok(value.client),
8203                contractor: Ok(value.contractor),
8204                data_document_set_id: Ok(value.data_document_set_id),
8205                description: Ok(value.description),
8206                engineer: Ok(value.engineer),
8207                fieldwork_date_start: Ok(value.fieldwork_date_start),
8208                investigation_id: Ok(value.investigation_id),
8209                investigation_name: Ok(value.investigation_name),
8210                location_coordinate_global: Ok(value.location_coordinate_global),
8211                location_coordinate_project: Ok(value.location_coordinate_project),
8212                location_description: Ok(value.location_description),
8213                parent_project_name: Ok(value.parent_project_name),
8214                remarks: Ok(value.remarks),
8215                report_document_set_id: Ok(value.report_document_set_id),
8216                scope_description: Ok(value.scope_description),
8217                specification_document_set_id: Ok(value.specification_document_set_id),
8218                subcontractors: Ok(value.subcontractors),
8219                ultimate_project_client: Ok(value.ultimate_project_client),
8220                ultimate_project_name: Ok(value.ultimate_project_name),
8221            }
8222        }
8223    }
8224    #[derive(Clone, Debug)]
8225    pub struct AgsSchema {
8226        link: ::std::result::Result<
8227            ::std::option::Option<::std::string::String>,
8228            ::std::string::String,
8229        >,
8230        name: ::std::result::Result<super::AgsSchemaName, ::std::string::String>,
8231        version: ::std::result::Result<super::AgsSchemaVersion, ::std::string::String>,
8232    }
8233    impl ::std::default::Default for AgsSchema {
8234        fn default() -> Self {
8235            Self {
8236                link: Ok(Default::default()),
8237                name: Err("no value supplied for name".to_string()),
8238                version: Err("no value supplied for version".to_string()),
8239            }
8240        }
8241    }
8242    impl AgsSchema {
8243        pub fn link<T>(mut self, value: T) -> Self
8244        where
8245            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8246            T::Error: ::std::fmt::Display,
8247        {
8248            self.link = value
8249                .try_into()
8250                .map_err(|e| format!("error converting supplied value for link: {}", e));
8251            self
8252        }
8253        pub fn name<T>(mut self, value: T) -> Self
8254        where
8255            T: ::std::convert::TryInto<super::AgsSchemaName>,
8256            T::Error: ::std::fmt::Display,
8257        {
8258            self.name = value
8259                .try_into()
8260                .map_err(|e| format!("error converting supplied value for name: {}", e));
8261            self
8262        }
8263        pub fn version<T>(mut self, value: T) -> Self
8264        where
8265            T: ::std::convert::TryInto<super::AgsSchemaVersion>,
8266            T::Error: ::std::fmt::Display,
8267        {
8268            self.version = value
8269                .try_into()
8270                .map_err(|e| format!("error converting supplied value for version: {}", e));
8271            self
8272        }
8273    }
8274    impl ::std::convert::TryFrom<AgsSchema> for super::AgsSchema {
8275        type Error = super::error::ConversionError;
8276        fn try_from(
8277            value: AgsSchema,
8278        ) -> ::std::result::Result<Self, super::error::ConversionError> {
8279            Ok(Self {
8280                link: value.link?,
8281                name: value.name?,
8282                version: value.version?,
8283            })
8284        }
8285    }
8286    impl ::std::convert::From<super::AgsSchema> for AgsSchema {
8287        fn from(value: super::AgsSchema) -> Self {
8288            Self {
8289                link: Ok(value.link),
8290                name: Ok(value.name),
8291                version: Ok(value.version),
8292            }
8293        }
8294    }
8295    #[derive(Clone, Debug)]
8296    pub struct AgsiDataParameterValue {
8297        case_id: ::std::result::Result<
8298            ::std::option::Option<::std::string::String>,
8299            ::std::string::String,
8300        >,
8301        code_id: ::std::result::Result<super::AgsiDataParameterValueCodeId, ::std::string::String>,
8302        data_id: ::std::result::Result<
8303            ::std::option::Option<::std::string::String>,
8304            ::std::string::String,
8305        >,
8306        remarks: ::std::result::Result<
8307            ::std::option::Option<::std::string::String>,
8308            ::std::string::String,
8309        >,
8310        value_numeric: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8311        value_profile: ::std::result::Result<
8312            ::std::option::Option<super::ValueProfile>,
8313            ::std::string::String,
8314        >,
8315        value_profile_ind_var_code_id: ::std::result::Result<
8316            ::std::option::Option<::std::string::String>,
8317            ::std::string::String,
8318        >,
8319        value_text: ::std::result::Result<
8320            ::std::option::Option<::std::string::String>,
8321            ::std::string::String,
8322        >,
8323    }
8324    impl ::std::default::Default for AgsiDataParameterValue {
8325        fn default() -> Self {
8326            Self {
8327                case_id: Ok(Default::default()),
8328                code_id: Err("no value supplied for code_id".to_string()),
8329                data_id: Ok(Default::default()),
8330                remarks: Ok(Default::default()),
8331                value_numeric: Ok(Default::default()),
8332                value_profile: Ok(Default::default()),
8333                value_profile_ind_var_code_id: Ok(Default::default()),
8334                value_text: Ok(Default::default()),
8335            }
8336        }
8337    }
8338    impl AgsiDataParameterValue {
8339        pub fn case_id<T>(mut self, value: T) -> Self
8340        where
8341            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8342            T::Error: ::std::fmt::Display,
8343        {
8344            self.case_id = value
8345                .try_into()
8346                .map_err(|e| format!("error converting supplied value for case_id: {}", e));
8347            self
8348        }
8349        pub fn code_id<T>(mut self, value: T) -> Self
8350        where
8351            T: ::std::convert::TryInto<super::AgsiDataParameterValueCodeId>,
8352            T::Error: ::std::fmt::Display,
8353        {
8354            self.code_id = value
8355                .try_into()
8356                .map_err(|e| format!("error converting supplied value for code_id: {}", e));
8357            self
8358        }
8359        pub fn data_id<T>(mut self, value: T) -> Self
8360        where
8361            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8362            T::Error: ::std::fmt::Display,
8363        {
8364            self.data_id = value
8365                .try_into()
8366                .map_err(|e| format!("error converting supplied value for data_id: {}", e));
8367            self
8368        }
8369        pub fn remarks<T>(mut self, value: T) -> Self
8370        where
8371            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8372            T::Error: ::std::fmt::Display,
8373        {
8374            self.remarks = value
8375                .try_into()
8376                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
8377            self
8378        }
8379        pub fn value_numeric<T>(mut self, value: T) -> Self
8380        where
8381            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8382            T::Error: ::std::fmt::Display,
8383        {
8384            self.value_numeric = value
8385                .try_into()
8386                .map_err(|e| format!("error converting supplied value for value_numeric: {}", e));
8387            self
8388        }
8389        pub fn value_profile<T>(mut self, value: T) -> Self
8390        where
8391            T: ::std::convert::TryInto<::std::option::Option<super::ValueProfile>>,
8392            T::Error: ::std::fmt::Display,
8393        {
8394            self.value_profile = value
8395                .try_into()
8396                .map_err(|e| format!("error converting supplied value for value_profile: {}", e));
8397            self
8398        }
8399        pub fn value_profile_ind_var_code_id<T>(mut self, value: T) -> Self
8400        where
8401            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8402            T::Error: ::std::fmt::Display,
8403        {
8404            self.value_profile_ind_var_code_id = value.try_into().map_err(|e| {
8405                format!(
8406                    "error converting supplied value for value_profile_ind_var_code_id: {}",
8407                    e
8408                )
8409            });
8410            self
8411        }
8412        pub fn value_text<T>(mut self, value: T) -> Self
8413        where
8414            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8415            T::Error: ::std::fmt::Display,
8416        {
8417            self.value_text = value
8418                .try_into()
8419                .map_err(|e| format!("error converting supplied value for value_text: {}", e));
8420            self
8421        }
8422    }
8423    impl ::std::convert::TryFrom<AgsiDataParameterValue> for super::AgsiDataParameterValue {
8424        type Error = super::error::ConversionError;
8425        fn try_from(
8426            value: AgsiDataParameterValue,
8427        ) -> ::std::result::Result<Self, super::error::ConversionError> {
8428            Ok(Self {
8429                case_id: value.case_id?,
8430                code_id: value.code_id?,
8431                data_id: value.data_id?,
8432                remarks: value.remarks?,
8433                value_numeric: value.value_numeric?,
8434                value_profile: value.value_profile?,
8435                value_profile_ind_var_code_id: value.value_profile_ind_var_code_id?,
8436                value_text: value.value_text?,
8437            })
8438        }
8439    }
8440    impl ::std::convert::From<super::AgsiDataParameterValue> for AgsiDataParameterValue {
8441        fn from(value: super::AgsiDataParameterValue) -> Self {
8442            Self {
8443                case_id: Ok(value.case_id),
8444                code_id: Ok(value.code_id),
8445                data_id: Ok(value.data_id),
8446                remarks: Ok(value.remarks),
8447                value_numeric: Ok(value.value_numeric),
8448                value_profile: Ok(value.value_profile),
8449                value_profile_ind_var_code_id: Ok(value.value_profile_ind_var_code_id),
8450                value_text: Ok(value.value_text),
8451            }
8452        }
8453    }
8454    #[derive(Clone, Debug)]
8455    pub struct AgsiDataPropertyFromFile {
8456        data_id: ::std::result::Result<
8457            ::std::option::Option<::std::string::String>,
8458            ::std::string::String,
8459        >,
8460        date: ::std::result::Result<
8461            ::std::option::Option<::std::string::String>,
8462            ::std::string::String,
8463        >,
8464        description: ::std::result::Result<
8465            ::std::option::Option<::std::string::String>,
8466            ::std::string::String,
8467        >,
8468        file_format: ::std::result::Result<
8469            ::std::option::Option<::std::string::String>,
8470            ::std::string::String,
8471        >,
8472        file_format_version: ::std::result::Result<
8473            ::std::option::Option<::std::string::String>,
8474            ::std::string::String,
8475        >,
8476        file_part: ::std::result::Result<
8477            ::std::option::Option<::std::string::String>,
8478            ::std::string::String,
8479        >,
8480        file_uri: ::std::result::Result<::std::string::String, ::std::string::String>,
8481        remarks: ::std::result::Result<
8482            ::std::option::Option<::std::string::String>,
8483            ::std::string::String,
8484        >,
8485        revision: ::std::result::Result<
8486            ::std::option::Option<::std::string::String>,
8487            ::std::string::String,
8488        >,
8489        revision_info: ::std::result::Result<
8490            ::std::option::Option<::std::string::String>,
8491            ::std::string::String,
8492        >,
8493    }
8494    impl ::std::default::Default for AgsiDataPropertyFromFile {
8495        fn default() -> Self {
8496            Self {
8497                data_id: Ok(Default::default()),
8498                date: Ok(Default::default()),
8499                description: Ok(Default::default()),
8500                file_format: Ok(Default::default()),
8501                file_format_version: Ok(Default::default()),
8502                file_part: Ok(Default::default()),
8503                file_uri: Err("no value supplied for file_uri".to_string()),
8504                remarks: Ok(Default::default()),
8505                revision: Ok(Default::default()),
8506                revision_info: Ok(Default::default()),
8507            }
8508        }
8509    }
8510    impl AgsiDataPropertyFromFile {
8511        pub fn data_id<T>(mut self, value: T) -> Self
8512        where
8513            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8514            T::Error: ::std::fmt::Display,
8515        {
8516            self.data_id = value
8517                .try_into()
8518                .map_err(|e| format!("error converting supplied value for data_id: {}", e));
8519            self
8520        }
8521        pub fn date<T>(mut self, value: T) -> Self
8522        where
8523            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8524            T::Error: ::std::fmt::Display,
8525        {
8526            self.date = value
8527                .try_into()
8528                .map_err(|e| format!("error converting supplied value for date: {}", e));
8529            self
8530        }
8531        pub fn description<T>(mut self, value: T) -> Self
8532        where
8533            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8534            T::Error: ::std::fmt::Display,
8535        {
8536            self.description = value
8537                .try_into()
8538                .map_err(|e| format!("error converting supplied value for description: {}", e));
8539            self
8540        }
8541        pub fn file_format<T>(mut self, value: T) -> Self
8542        where
8543            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8544            T::Error: ::std::fmt::Display,
8545        {
8546            self.file_format = value
8547                .try_into()
8548                .map_err(|e| format!("error converting supplied value for file_format: {}", e));
8549            self
8550        }
8551        pub fn file_format_version<T>(mut self, value: T) -> Self
8552        where
8553            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8554            T::Error: ::std::fmt::Display,
8555        {
8556            self.file_format_version = value.try_into().map_err(|e| {
8557                format!(
8558                    "error converting supplied value for file_format_version: {}",
8559                    e
8560                )
8561            });
8562            self
8563        }
8564        pub fn file_part<T>(mut self, value: T) -> Self
8565        where
8566            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8567            T::Error: ::std::fmt::Display,
8568        {
8569            self.file_part = value
8570                .try_into()
8571                .map_err(|e| format!("error converting supplied value for file_part: {}", e));
8572            self
8573        }
8574        pub fn file_uri<T>(mut self, value: T) -> Self
8575        where
8576            T: ::std::convert::TryInto<::std::string::String>,
8577            T::Error: ::std::fmt::Display,
8578        {
8579            self.file_uri = value
8580                .try_into()
8581                .map_err(|e| format!("error converting supplied value for file_uri: {}", e));
8582            self
8583        }
8584        pub fn remarks<T>(mut self, value: T) -> Self
8585        where
8586            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8587            T::Error: ::std::fmt::Display,
8588        {
8589            self.remarks = value
8590                .try_into()
8591                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
8592            self
8593        }
8594        pub fn revision<T>(mut self, value: T) -> Self
8595        where
8596            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8597            T::Error: ::std::fmt::Display,
8598        {
8599            self.revision = value
8600                .try_into()
8601                .map_err(|e| format!("error converting supplied value for revision: {}", e));
8602            self
8603        }
8604        pub fn revision_info<T>(mut self, value: T) -> Self
8605        where
8606            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8607            T::Error: ::std::fmt::Display,
8608        {
8609            self.revision_info = value
8610                .try_into()
8611                .map_err(|e| format!("error converting supplied value for revision_info: {}", e));
8612            self
8613        }
8614    }
8615    impl ::std::convert::TryFrom<AgsiDataPropertyFromFile> for super::AgsiDataPropertyFromFile {
8616        type Error = super::error::ConversionError;
8617        fn try_from(
8618            value: AgsiDataPropertyFromFile,
8619        ) -> ::std::result::Result<Self, super::error::ConversionError> {
8620            Ok(Self {
8621                data_id: value.data_id?,
8622                date: value.date?,
8623                description: value.description?,
8624                file_format: value.file_format?,
8625                file_format_version: value.file_format_version?,
8626                file_part: value.file_part?,
8627                file_uri: value.file_uri?,
8628                remarks: value.remarks?,
8629                revision: value.revision?,
8630                revision_info: value.revision_info?,
8631            })
8632        }
8633    }
8634    impl ::std::convert::From<super::AgsiDataPropertyFromFile> for AgsiDataPropertyFromFile {
8635        fn from(value: super::AgsiDataPropertyFromFile) -> Self {
8636            Self {
8637                data_id: Ok(value.data_id),
8638                date: Ok(value.date),
8639                description: Ok(value.description),
8640                file_format: Ok(value.file_format),
8641                file_format_version: Ok(value.file_format_version),
8642                file_part: Ok(value.file_part),
8643                file_uri: Ok(value.file_uri),
8644                remarks: Ok(value.remarks),
8645                revision: Ok(value.revision),
8646                revision_info: Ok(value.revision_info),
8647            }
8648        }
8649    }
8650    #[derive(Clone, Debug)]
8651    pub struct AgsiDataPropertySummary {
8652        case_id: ::std::result::Result<
8653            ::std::option::Option<::std::string::String>,
8654            ::std::string::String,
8655        >,
8656        code_id: ::std::result::Result<super::AgsiDataPropertySummaryCodeId, ::std::string::String>,
8657        data_id: ::std::result::Result<
8658            ::std::option::Option<::std::string::String>,
8659            ::std::string::String,
8660        >,
8661        remarks: ::std::result::Result<
8662            ::std::option::Option<::std::string::String>,
8663            ::std::string::String,
8664        >,
8665        value_count: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8666        value_max: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8667        value_mean: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8668        value_min: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8669        value_std_dev: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8670        value_summary_text: ::std::result::Result<
8671            ::std::option::Option<::std::string::String>,
8672            ::std::string::String,
8673        >,
8674    }
8675    impl ::std::default::Default for AgsiDataPropertySummary {
8676        fn default() -> Self {
8677            Self {
8678                case_id: Ok(Default::default()),
8679                code_id: Err("no value supplied for code_id".to_string()),
8680                data_id: Ok(Default::default()),
8681                remarks: Ok(Default::default()),
8682                value_count: Ok(Default::default()),
8683                value_max: Ok(Default::default()),
8684                value_mean: Ok(Default::default()),
8685                value_min: Ok(Default::default()),
8686                value_std_dev: Ok(Default::default()),
8687                value_summary_text: Ok(Default::default()),
8688            }
8689        }
8690    }
8691    impl AgsiDataPropertySummary {
8692        pub fn case_id<T>(mut self, value: T) -> Self
8693        where
8694            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8695            T::Error: ::std::fmt::Display,
8696        {
8697            self.case_id = value
8698                .try_into()
8699                .map_err(|e| format!("error converting supplied value for case_id: {}", e));
8700            self
8701        }
8702        pub fn code_id<T>(mut self, value: T) -> Self
8703        where
8704            T: ::std::convert::TryInto<super::AgsiDataPropertySummaryCodeId>,
8705            T::Error: ::std::fmt::Display,
8706        {
8707            self.code_id = value
8708                .try_into()
8709                .map_err(|e| format!("error converting supplied value for code_id: {}", e));
8710            self
8711        }
8712        pub fn data_id<T>(mut self, value: T) -> Self
8713        where
8714            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8715            T::Error: ::std::fmt::Display,
8716        {
8717            self.data_id = value
8718                .try_into()
8719                .map_err(|e| format!("error converting supplied value for data_id: {}", e));
8720            self
8721        }
8722        pub fn remarks<T>(mut self, value: T) -> Self
8723        where
8724            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8725            T::Error: ::std::fmt::Display,
8726        {
8727            self.remarks = value
8728                .try_into()
8729                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
8730            self
8731        }
8732        pub fn value_count<T>(mut self, value: T) -> Self
8733        where
8734            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8735            T::Error: ::std::fmt::Display,
8736        {
8737            self.value_count = value
8738                .try_into()
8739                .map_err(|e| format!("error converting supplied value for value_count: {}", e));
8740            self
8741        }
8742        pub fn value_max<T>(mut self, value: T) -> Self
8743        where
8744            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8745            T::Error: ::std::fmt::Display,
8746        {
8747            self.value_max = value
8748                .try_into()
8749                .map_err(|e| format!("error converting supplied value for value_max: {}", e));
8750            self
8751        }
8752        pub fn value_mean<T>(mut self, value: T) -> Self
8753        where
8754            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8755            T::Error: ::std::fmt::Display,
8756        {
8757            self.value_mean = value
8758                .try_into()
8759                .map_err(|e| format!("error converting supplied value for value_mean: {}", e));
8760            self
8761        }
8762        pub fn value_min<T>(mut self, value: T) -> Self
8763        where
8764            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8765            T::Error: ::std::fmt::Display,
8766        {
8767            self.value_min = value
8768                .try_into()
8769                .map_err(|e| format!("error converting supplied value for value_min: {}", e));
8770            self
8771        }
8772        pub fn value_std_dev<T>(mut self, value: T) -> Self
8773        where
8774            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8775            T::Error: ::std::fmt::Display,
8776        {
8777            self.value_std_dev = value
8778                .try_into()
8779                .map_err(|e| format!("error converting supplied value for value_std_dev: {}", e));
8780            self
8781        }
8782        pub fn value_summary_text<T>(mut self, value: T) -> Self
8783        where
8784            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8785            T::Error: ::std::fmt::Display,
8786        {
8787            self.value_summary_text = value.try_into().map_err(|e| {
8788                format!(
8789                    "error converting supplied value for value_summary_text: {}",
8790                    e
8791                )
8792            });
8793            self
8794        }
8795    }
8796    impl ::std::convert::TryFrom<AgsiDataPropertySummary> for super::AgsiDataPropertySummary {
8797        type Error = super::error::ConversionError;
8798        fn try_from(
8799            value: AgsiDataPropertySummary,
8800        ) -> ::std::result::Result<Self, super::error::ConversionError> {
8801            Ok(Self {
8802                case_id: value.case_id?,
8803                code_id: value.code_id?,
8804                data_id: value.data_id?,
8805                remarks: value.remarks?,
8806                value_count: value.value_count?,
8807                value_max: value.value_max?,
8808                value_mean: value.value_mean?,
8809                value_min: value.value_min?,
8810                value_std_dev: value.value_std_dev?,
8811                value_summary_text: value.value_summary_text?,
8812            })
8813        }
8814    }
8815    impl ::std::convert::From<super::AgsiDataPropertySummary> for AgsiDataPropertySummary {
8816        fn from(value: super::AgsiDataPropertySummary) -> Self {
8817            Self {
8818                case_id: Ok(value.case_id),
8819                code_id: Ok(value.code_id),
8820                data_id: Ok(value.data_id),
8821                remarks: Ok(value.remarks),
8822                value_count: Ok(value.value_count),
8823                value_max: Ok(value.value_max),
8824                value_mean: Ok(value.value_mean),
8825                value_min: Ok(value.value_min),
8826                value_std_dev: Ok(value.value_std_dev),
8827                value_summary_text: Ok(value.value_summary_text),
8828            }
8829        }
8830    }
8831    #[derive(Clone, Debug)]
8832    pub struct AgsiDataPropertyValue {
8833        case_id: ::std::result::Result<
8834            ::std::option::Option<::std::string::String>,
8835            ::std::string::String,
8836        >,
8837        code_id: ::std::result::Result<super::AgsiDataPropertyValueCodeId, ::std::string::String>,
8838        data_id: ::std::result::Result<
8839            ::std::option::Option<::std::string::String>,
8840            ::std::string::String,
8841        >,
8842        remarks: ::std::result::Result<
8843            ::std::option::Option<::std::string::String>,
8844            ::std::string::String,
8845        >,
8846        value_numeric: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
8847        value_profile: ::std::result::Result<
8848            ::std::option::Option<super::ValueProfile>,
8849            ::std::string::String,
8850        >,
8851        value_profile_ind_var_code_id: ::std::result::Result<
8852            ::std::option::Option<::std::string::String>,
8853            ::std::string::String,
8854        >,
8855        value_text: ::std::result::Result<
8856            ::std::option::Option<::std::string::String>,
8857            ::std::string::String,
8858        >,
8859    }
8860    impl ::std::default::Default for AgsiDataPropertyValue {
8861        fn default() -> Self {
8862            Self {
8863                case_id: Ok(Default::default()),
8864                code_id: Err("no value supplied for code_id".to_string()),
8865                data_id: Ok(Default::default()),
8866                remarks: Ok(Default::default()),
8867                value_numeric: Ok(Default::default()),
8868                value_profile: Ok(Default::default()),
8869                value_profile_ind_var_code_id: Ok(Default::default()),
8870                value_text: Ok(Default::default()),
8871            }
8872        }
8873    }
8874    impl AgsiDataPropertyValue {
8875        pub fn case_id<T>(mut self, value: T) -> Self
8876        where
8877            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8878            T::Error: ::std::fmt::Display,
8879        {
8880            self.case_id = value
8881                .try_into()
8882                .map_err(|e| format!("error converting supplied value for case_id: {}", e));
8883            self
8884        }
8885        pub fn code_id<T>(mut self, value: T) -> Self
8886        where
8887            T: ::std::convert::TryInto<super::AgsiDataPropertyValueCodeId>,
8888            T::Error: ::std::fmt::Display,
8889        {
8890            self.code_id = value
8891                .try_into()
8892                .map_err(|e| format!("error converting supplied value for code_id: {}", e));
8893            self
8894        }
8895        pub fn data_id<T>(mut self, value: T) -> Self
8896        where
8897            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8898            T::Error: ::std::fmt::Display,
8899        {
8900            self.data_id = value
8901                .try_into()
8902                .map_err(|e| format!("error converting supplied value for data_id: {}", e));
8903            self
8904        }
8905        pub fn remarks<T>(mut self, value: T) -> Self
8906        where
8907            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8908            T::Error: ::std::fmt::Display,
8909        {
8910            self.remarks = value
8911                .try_into()
8912                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
8913            self
8914        }
8915        pub fn value_numeric<T>(mut self, value: T) -> Self
8916        where
8917            T: ::std::convert::TryInto<::std::option::Option<f64>>,
8918            T::Error: ::std::fmt::Display,
8919        {
8920            self.value_numeric = value
8921                .try_into()
8922                .map_err(|e| format!("error converting supplied value for value_numeric: {}", e));
8923            self
8924        }
8925        pub fn value_profile<T>(mut self, value: T) -> Self
8926        where
8927            T: ::std::convert::TryInto<::std::option::Option<super::ValueProfile>>,
8928            T::Error: ::std::fmt::Display,
8929        {
8930            self.value_profile = value
8931                .try_into()
8932                .map_err(|e| format!("error converting supplied value for value_profile: {}", e));
8933            self
8934        }
8935        pub fn value_profile_ind_var_code_id<T>(mut self, value: T) -> Self
8936        where
8937            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8938            T::Error: ::std::fmt::Display,
8939        {
8940            self.value_profile_ind_var_code_id = value.try_into().map_err(|e| {
8941                format!(
8942                    "error converting supplied value for value_profile_ind_var_code_id: {}",
8943                    e
8944                )
8945            });
8946            self
8947        }
8948        pub fn value_text<T>(mut self, value: T) -> Self
8949        where
8950            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
8951            T::Error: ::std::fmt::Display,
8952        {
8953            self.value_text = value
8954                .try_into()
8955                .map_err(|e| format!("error converting supplied value for value_text: {}", e));
8956            self
8957        }
8958    }
8959    impl ::std::convert::TryFrom<AgsiDataPropertyValue> for super::AgsiDataPropertyValue {
8960        type Error = super::error::ConversionError;
8961        fn try_from(
8962            value: AgsiDataPropertyValue,
8963        ) -> ::std::result::Result<Self, super::error::ConversionError> {
8964            Ok(Self {
8965                case_id: value.case_id?,
8966                code_id: value.code_id?,
8967                data_id: value.data_id?,
8968                remarks: value.remarks?,
8969                value_numeric: value.value_numeric?,
8970                value_profile: value.value_profile?,
8971                value_profile_ind_var_code_id: value.value_profile_ind_var_code_id?,
8972                value_text: value.value_text?,
8973            })
8974        }
8975    }
8976    impl ::std::convert::From<super::AgsiDataPropertyValue> for AgsiDataPropertyValue {
8977        fn from(value: super::AgsiDataPropertyValue) -> Self {
8978            Self {
8979                case_id: Ok(value.case_id),
8980                code_id: Ok(value.code_id),
8981                data_id: Ok(value.data_id),
8982                remarks: Ok(value.remarks),
8983                value_numeric: Ok(value.value_numeric),
8984                value_profile: Ok(value.value_profile),
8985                value_profile_ind_var_code_id: Ok(value.value_profile_ind_var_code_id),
8986                value_text: Ok(value.value_text),
8987            }
8988        }
8989    }
8990    #[derive(Clone, Debug)]
8991    pub struct AgsiGeometryFromFile {
8992        date: ::std::result::Result<
8993            ::std::option::Option<::chrono::naive::NaiveDate>,
8994            ::std::string::String,
8995        >,
8996        description: ::std::result::Result<
8997            ::std::option::Option<::std::string::String>,
8998            ::std::string::String,
8999        >,
9000        file_format: ::std::result::Result<
9001            ::std::option::Option<::std::string::String>,
9002            ::std::string::String,
9003        >,
9004        file_format_version: ::std::result::Result<
9005            ::std::option::Option<::std::string::String>,
9006            ::std::string::String,
9007        >,
9008        file_part: ::std::result::Result<
9009            ::std::option::Option<::std::string::String>,
9010            ::std::string::String,
9011        >,
9012        file_uri: ::std::result::Result<::std::string::String, ::std::string::String>,
9013        geometry_id: ::std::result::Result<
9014            ::std::option::Option<::std::string::String>,
9015            ::std::string::String,
9016        >,
9017        geometry_type: ::std::result::Result<
9018            ::std::option::Option<::std::string::String>,
9019            ::std::string::String,
9020        >,
9021        remarks: ::std::result::Result<
9022            ::std::option::Option<::std::string::String>,
9023            ::std::string::String,
9024        >,
9025        revision: ::std::result::Result<
9026            ::std::option::Option<::std::string::String>,
9027            ::std::string::String,
9028        >,
9029        revision_info: ::std::result::Result<
9030            ::std::option::Option<::std::string::String>,
9031            ::std::string::String,
9032        >,
9033    }
9034    impl ::std::default::Default for AgsiGeometryFromFile {
9035        fn default() -> Self {
9036            Self {
9037                date: Ok(Default::default()),
9038                description: Ok(Default::default()),
9039                file_format: Ok(Default::default()),
9040                file_format_version: Ok(Default::default()),
9041                file_part: Ok(Default::default()),
9042                file_uri: Err("no value supplied for file_uri".to_string()),
9043                geometry_id: Ok(Default::default()),
9044                geometry_type: Ok(Default::default()),
9045                remarks: Ok(Default::default()),
9046                revision: Ok(Default::default()),
9047                revision_info: Ok(Default::default()),
9048            }
9049        }
9050    }
9051    impl AgsiGeometryFromFile {
9052        pub fn date<T>(mut self, value: T) -> Self
9053        where
9054            T: ::std::convert::TryInto<::std::option::Option<::chrono::naive::NaiveDate>>,
9055            T::Error: ::std::fmt::Display,
9056        {
9057            self.date = value
9058                .try_into()
9059                .map_err(|e| format!("error converting supplied value for date: {}", e));
9060            self
9061        }
9062        pub fn description<T>(mut self, value: T) -> Self
9063        where
9064            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9065            T::Error: ::std::fmt::Display,
9066        {
9067            self.description = value
9068                .try_into()
9069                .map_err(|e| format!("error converting supplied value for description: {}", e));
9070            self
9071        }
9072        pub fn file_format<T>(mut self, value: T) -> Self
9073        where
9074            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9075            T::Error: ::std::fmt::Display,
9076        {
9077            self.file_format = value
9078                .try_into()
9079                .map_err(|e| format!("error converting supplied value for file_format: {}", e));
9080            self
9081        }
9082        pub fn file_format_version<T>(mut self, value: T) -> Self
9083        where
9084            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9085            T::Error: ::std::fmt::Display,
9086        {
9087            self.file_format_version = value.try_into().map_err(|e| {
9088                format!(
9089                    "error converting supplied value for file_format_version: {}",
9090                    e
9091                )
9092            });
9093            self
9094        }
9095        pub fn file_part<T>(mut self, value: T) -> Self
9096        where
9097            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9098            T::Error: ::std::fmt::Display,
9099        {
9100            self.file_part = value
9101                .try_into()
9102                .map_err(|e| format!("error converting supplied value for file_part: {}", e));
9103            self
9104        }
9105        pub fn file_uri<T>(mut self, value: T) -> Self
9106        where
9107            T: ::std::convert::TryInto<::std::string::String>,
9108            T::Error: ::std::fmt::Display,
9109        {
9110            self.file_uri = value
9111                .try_into()
9112                .map_err(|e| format!("error converting supplied value for file_uri: {}", e));
9113            self
9114        }
9115        pub fn geometry_id<T>(mut self, value: T) -> Self
9116        where
9117            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9118            T::Error: ::std::fmt::Display,
9119        {
9120            self.geometry_id = value
9121                .try_into()
9122                .map_err(|e| format!("error converting supplied value for geometry_id: {}", e));
9123            self
9124        }
9125        pub fn geometry_type<T>(mut self, value: T) -> Self
9126        where
9127            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9128            T::Error: ::std::fmt::Display,
9129        {
9130            self.geometry_type = value
9131                .try_into()
9132                .map_err(|e| format!("error converting supplied value for geometry_type: {}", e));
9133            self
9134        }
9135        pub fn remarks<T>(mut self, value: T) -> Self
9136        where
9137            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9138            T::Error: ::std::fmt::Display,
9139        {
9140            self.remarks = value
9141                .try_into()
9142                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
9143            self
9144        }
9145        pub fn revision<T>(mut self, value: T) -> Self
9146        where
9147            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9148            T::Error: ::std::fmt::Display,
9149        {
9150            self.revision = value
9151                .try_into()
9152                .map_err(|e| format!("error converting supplied value for revision: {}", e));
9153            self
9154        }
9155        pub fn revision_info<T>(mut self, value: T) -> Self
9156        where
9157            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9158            T::Error: ::std::fmt::Display,
9159        {
9160            self.revision_info = value
9161                .try_into()
9162                .map_err(|e| format!("error converting supplied value for revision_info: {}", e));
9163            self
9164        }
9165    }
9166    impl ::std::convert::TryFrom<AgsiGeometryFromFile> for super::AgsiGeometryFromFile {
9167        type Error = super::error::ConversionError;
9168        fn try_from(
9169            value: AgsiGeometryFromFile,
9170        ) -> ::std::result::Result<Self, super::error::ConversionError> {
9171            Ok(Self {
9172                date: value.date?,
9173                description: value.description?,
9174                file_format: value.file_format?,
9175                file_format_version: value.file_format_version?,
9176                file_part: value.file_part?,
9177                file_uri: value.file_uri?,
9178                geometry_id: value.geometry_id?,
9179                geometry_type: value.geometry_type?,
9180                remarks: value.remarks?,
9181                revision: value.revision?,
9182                revision_info: value.revision_info?,
9183            })
9184        }
9185    }
9186    impl ::std::convert::From<super::AgsiGeometryFromFile> for AgsiGeometryFromFile {
9187        fn from(value: super::AgsiGeometryFromFile) -> Self {
9188            Self {
9189                date: Ok(value.date),
9190                description: Ok(value.description),
9191                file_format: Ok(value.file_format),
9192                file_format_version: Ok(value.file_format_version),
9193                file_part: Ok(value.file_part),
9194                file_uri: Ok(value.file_uri),
9195                geometry_id: Ok(value.geometry_id),
9196                geometry_type: Ok(value.geometry_type),
9197                remarks: Ok(value.remarks),
9198                revision: Ok(value.revision),
9199                revision_info: Ok(value.revision_info),
9200            }
9201        }
9202    }
9203    #[derive(Clone, Debug)]
9204    pub struct AgsiGeometryPlane {
9205        description: ::std::result::Result<
9206            ::std::option::Option<::std::string::String>,
9207            ::std::string::String,
9208        >,
9209        elevation: ::std::result::Result<f64, ::std::string::String>,
9210        geometry_id: ::std::result::Result<
9211            ::std::option::Option<::std::string::String>,
9212            ::std::string::String,
9213        >,
9214        remarks: ::std::result::Result<
9215            ::std::option::Option<::std::string::String>,
9216            ::std::string::String,
9217        >,
9218    }
9219    impl ::std::default::Default for AgsiGeometryPlane {
9220        fn default() -> Self {
9221            Self {
9222                description: Ok(Default::default()),
9223                elevation: Err("no value supplied for elevation".to_string()),
9224                geometry_id: Ok(Default::default()),
9225                remarks: Ok(Default::default()),
9226            }
9227        }
9228    }
9229    impl AgsiGeometryPlane {
9230        pub fn description<T>(mut self, value: T) -> Self
9231        where
9232            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9233            T::Error: ::std::fmt::Display,
9234        {
9235            self.description = value
9236                .try_into()
9237                .map_err(|e| format!("error converting supplied value for description: {}", e));
9238            self
9239        }
9240        pub fn elevation<T>(mut self, value: T) -> Self
9241        where
9242            T: ::std::convert::TryInto<f64>,
9243            T::Error: ::std::fmt::Display,
9244        {
9245            self.elevation = value
9246                .try_into()
9247                .map_err(|e| format!("error converting supplied value for elevation: {}", e));
9248            self
9249        }
9250        pub fn geometry_id<T>(mut self, value: T) -> Self
9251        where
9252            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9253            T::Error: ::std::fmt::Display,
9254        {
9255            self.geometry_id = value
9256                .try_into()
9257                .map_err(|e| format!("error converting supplied value for geometry_id: {}", e));
9258            self
9259        }
9260        pub fn remarks<T>(mut self, value: T) -> Self
9261        where
9262            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9263            T::Error: ::std::fmt::Display,
9264        {
9265            self.remarks = value
9266                .try_into()
9267                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
9268            self
9269        }
9270    }
9271    impl ::std::convert::TryFrom<AgsiGeometryPlane> for super::AgsiGeometryPlane {
9272        type Error = super::error::ConversionError;
9273        fn try_from(
9274            value: AgsiGeometryPlane,
9275        ) -> ::std::result::Result<Self, super::error::ConversionError> {
9276            Ok(Self {
9277                description: value.description?,
9278                elevation: value.elevation?,
9279                geometry_id: value.geometry_id?,
9280                remarks: value.remarks?,
9281            })
9282        }
9283    }
9284    impl ::std::convert::From<super::AgsiGeometryPlane> for AgsiGeometryPlane {
9285        fn from(value: super::AgsiGeometryPlane) -> Self {
9286            Self {
9287                description: Ok(value.description),
9288                elevation: Ok(value.elevation),
9289                geometry_id: Ok(value.geometry_id),
9290                remarks: Ok(value.remarks),
9291            }
9292        }
9293    }
9294    #[derive(Clone, Debug)]
9295    pub struct AgsiModel {
9296        agsi_model_alignment: ::std::result::Result<
9297            ::std::vec::Vec<super::AgsiModelAlignment>,
9298            ::std::string::String,
9299        >,
9300        agsi_model_boundary: ::std::result::Result<
9301            ::std::option::Option<super::AgsiModelBoundary>,
9302            ::std::string::String,
9303        >,
9304        agsi_model_element:
9305            ::std::result::Result<::std::vec::Vec<super::AgsiModelElement>, ::std::string::String>,
9306        agsi_observation_set: ::std::result::Result<
9307            ::std::vec::Vec<super::AgsiObservationSet>,
9308            ::std::string::String,
9309        >,
9310        alignment_id: ::std::result::Result<
9311            ::std::option::Option<::std::string::String>,
9312            ::std::string::String,
9313        >,
9314        category: ::std::result::Result<
9315            ::std::option::Option<::std::string::String>,
9316            ::std::string::String,
9317        >,
9318        coord_system_id: ::std::result::Result<
9319            ::std::option::Option<::std::string::String>,
9320            ::std::string::String,
9321        >,
9322        description: ::std::result::Result<
9323            ::std::option::Option<::std::string::String>,
9324            ::std::string::String,
9325        >,
9326        document_set_id: ::std::result::Result<
9327            ::std::option::Option<::std::string::String>,
9328            ::std::string::String,
9329        >,
9330        domain: ::std::result::Result<
9331            ::std::option::Option<::std::string::String>,
9332            ::std::string::String,
9333        >,
9334        input: ::std::result::Result<
9335            ::std::option::Option<::std::string::String>,
9336            ::std::string::String,
9337        >,
9338        method: ::std::result::Result<
9339            ::std::option::Option<::std::string::String>,
9340            ::std::string::String,
9341        >,
9342        model_id: ::std::result::Result<
9343            ::std::option::Option<::std::string::String>,
9344            ::std::string::String,
9345        >,
9346        model_name: ::std::result::Result<
9347            ::std::option::Option<::std::string::String>,
9348            ::std::string::String,
9349        >,
9350        model_type: ::std::result::Result<
9351            ::std::option::Option<::std::string::String>,
9352            ::std::string::String,
9353        >,
9354        remarks: ::std::result::Result<
9355            ::std::option::Option<::std::string::String>,
9356            ::std::string::String,
9357        >,
9358        uncertainty: ::std::result::Result<
9359            ::std::option::Option<::std::string::String>,
9360            ::std::string::String,
9361        >,
9362        usage: ::std::result::Result<
9363            ::std::option::Option<::std::string::String>,
9364            ::std::string::String,
9365        >,
9366    }
9367    impl ::std::default::Default for AgsiModel {
9368        fn default() -> Self {
9369            Self {
9370                agsi_model_alignment: Ok(Default::default()),
9371                agsi_model_boundary: Ok(Default::default()),
9372                agsi_model_element: Ok(Default::default()),
9373                agsi_observation_set: Ok(Default::default()),
9374                alignment_id: Ok(Default::default()),
9375                category: Ok(Default::default()),
9376                coord_system_id: Ok(Default::default()),
9377                description: Ok(Default::default()),
9378                document_set_id: Ok(Default::default()),
9379                domain: Ok(Default::default()),
9380                input: Ok(Default::default()),
9381                method: Ok(Default::default()),
9382                model_id: Ok(Default::default()),
9383                model_name: Ok(Default::default()),
9384                model_type: Ok(Default::default()),
9385                remarks: Ok(Default::default()),
9386                uncertainty: Ok(Default::default()),
9387                usage: Ok(Default::default()),
9388            }
9389        }
9390    }
9391    impl AgsiModel {
9392        pub fn agsi_model_alignment<T>(mut self, value: T) -> Self
9393        where
9394            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiModelAlignment>>,
9395            T::Error: ::std::fmt::Display,
9396        {
9397            self.agsi_model_alignment = value.try_into().map_err(|e| {
9398                format!(
9399                    "error converting supplied value for agsi_model_alignment: {}",
9400                    e
9401                )
9402            });
9403            self
9404        }
9405        pub fn agsi_model_boundary<T>(mut self, value: T) -> Self
9406        where
9407            T: ::std::convert::TryInto<::std::option::Option<super::AgsiModelBoundary>>,
9408            T::Error: ::std::fmt::Display,
9409        {
9410            self.agsi_model_boundary = value.try_into().map_err(|e| {
9411                format!(
9412                    "error converting supplied value for agsi_model_boundary: {}",
9413                    e
9414                )
9415            });
9416            self
9417        }
9418        pub fn agsi_model_element<T>(mut self, value: T) -> Self
9419        where
9420            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiModelElement>>,
9421            T::Error: ::std::fmt::Display,
9422        {
9423            self.agsi_model_element = value.try_into().map_err(|e| {
9424                format!(
9425                    "error converting supplied value for agsi_model_element: {}",
9426                    e
9427                )
9428            });
9429            self
9430        }
9431        pub fn agsi_observation_set<T>(mut self, value: T) -> Self
9432        where
9433            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiObservationSet>>,
9434            T::Error: ::std::fmt::Display,
9435        {
9436            self.agsi_observation_set = value.try_into().map_err(|e| {
9437                format!(
9438                    "error converting supplied value for agsi_observation_set: {}",
9439                    e
9440                )
9441            });
9442            self
9443        }
9444        pub fn alignment_id<T>(mut self, value: T) -> Self
9445        where
9446            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9447            T::Error: ::std::fmt::Display,
9448        {
9449            self.alignment_id = value
9450                .try_into()
9451                .map_err(|e| format!("error converting supplied value for alignment_id: {}", e));
9452            self
9453        }
9454        pub fn category<T>(mut self, value: T) -> Self
9455        where
9456            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9457            T::Error: ::std::fmt::Display,
9458        {
9459            self.category = value
9460                .try_into()
9461                .map_err(|e| format!("error converting supplied value for category: {}", e));
9462            self
9463        }
9464        pub fn coord_system_id<T>(mut self, value: T) -> Self
9465        where
9466            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9467            T::Error: ::std::fmt::Display,
9468        {
9469            self.coord_system_id = value
9470                .try_into()
9471                .map_err(|e| format!("error converting supplied value for coord_system_id: {}", e));
9472            self
9473        }
9474        pub fn description<T>(mut self, value: T) -> Self
9475        where
9476            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9477            T::Error: ::std::fmt::Display,
9478        {
9479            self.description = value
9480                .try_into()
9481                .map_err(|e| format!("error converting supplied value for description: {}", e));
9482            self
9483        }
9484        pub fn document_set_id<T>(mut self, value: T) -> Self
9485        where
9486            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9487            T::Error: ::std::fmt::Display,
9488        {
9489            self.document_set_id = value
9490                .try_into()
9491                .map_err(|e| format!("error converting supplied value for document_set_id: {}", e));
9492            self
9493        }
9494        pub fn domain<T>(mut self, value: T) -> Self
9495        where
9496            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9497            T::Error: ::std::fmt::Display,
9498        {
9499            self.domain = value
9500                .try_into()
9501                .map_err(|e| format!("error converting supplied value for domain: {}", e));
9502            self
9503        }
9504        pub fn input<T>(mut self, value: T) -> Self
9505        where
9506            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9507            T::Error: ::std::fmt::Display,
9508        {
9509            self.input = value
9510                .try_into()
9511                .map_err(|e| format!("error converting supplied value for input: {}", e));
9512            self
9513        }
9514        pub fn method<T>(mut self, value: T) -> Self
9515        where
9516            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9517            T::Error: ::std::fmt::Display,
9518        {
9519            self.method = value
9520                .try_into()
9521                .map_err(|e| format!("error converting supplied value for method: {}", e));
9522            self
9523        }
9524        pub fn model_id<T>(mut self, value: T) -> Self
9525        where
9526            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9527            T::Error: ::std::fmt::Display,
9528        {
9529            self.model_id = value
9530                .try_into()
9531                .map_err(|e| format!("error converting supplied value for model_id: {}", e));
9532            self
9533        }
9534        pub fn model_name<T>(mut self, value: T) -> Self
9535        where
9536            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9537            T::Error: ::std::fmt::Display,
9538        {
9539            self.model_name = value
9540                .try_into()
9541                .map_err(|e| format!("error converting supplied value for model_name: {}", e));
9542            self
9543        }
9544        pub fn model_type<T>(mut self, value: T) -> Self
9545        where
9546            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9547            T::Error: ::std::fmt::Display,
9548        {
9549            self.model_type = value
9550                .try_into()
9551                .map_err(|e| format!("error converting supplied value for model_type: {}", e));
9552            self
9553        }
9554        pub fn remarks<T>(mut self, value: T) -> Self
9555        where
9556            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9557            T::Error: ::std::fmt::Display,
9558        {
9559            self.remarks = value
9560                .try_into()
9561                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
9562            self
9563        }
9564        pub fn uncertainty<T>(mut self, value: T) -> Self
9565        where
9566            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9567            T::Error: ::std::fmt::Display,
9568        {
9569            self.uncertainty = value
9570                .try_into()
9571                .map_err(|e| format!("error converting supplied value for uncertainty: {}", e));
9572            self
9573        }
9574        pub fn usage<T>(mut self, value: T) -> Self
9575        where
9576            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9577            T::Error: ::std::fmt::Display,
9578        {
9579            self.usage = value
9580                .try_into()
9581                .map_err(|e| format!("error converting supplied value for usage: {}", e));
9582            self
9583        }
9584    }
9585    impl ::std::convert::TryFrom<AgsiModel> for super::AgsiModel {
9586        type Error = super::error::ConversionError;
9587        fn try_from(
9588            value: AgsiModel,
9589        ) -> ::std::result::Result<Self, super::error::ConversionError> {
9590            Ok(Self {
9591                agsi_model_alignment: value.agsi_model_alignment?,
9592                agsi_model_boundary: value.agsi_model_boundary?,
9593                agsi_model_element: value.agsi_model_element?,
9594                agsi_observation_set: value.agsi_observation_set?,
9595                alignment_id: value.alignment_id?,
9596                category: value.category?,
9597                coord_system_id: value.coord_system_id?,
9598                description: value.description?,
9599                document_set_id: value.document_set_id?,
9600                domain: value.domain?,
9601                input: value.input?,
9602                method: value.method?,
9603                model_id: value.model_id?,
9604                model_name: value.model_name?,
9605                model_type: value.model_type?,
9606                remarks: value.remarks?,
9607                uncertainty: value.uncertainty?,
9608                usage: value.usage?,
9609            })
9610        }
9611    }
9612    impl ::std::convert::From<super::AgsiModel> for AgsiModel {
9613        fn from(value: super::AgsiModel) -> Self {
9614            Self {
9615                agsi_model_alignment: Ok(value.agsi_model_alignment),
9616                agsi_model_boundary: Ok(value.agsi_model_boundary),
9617                agsi_model_element: Ok(value.agsi_model_element),
9618                agsi_observation_set: Ok(value.agsi_observation_set),
9619                alignment_id: Ok(value.alignment_id),
9620                category: Ok(value.category),
9621                coord_system_id: Ok(value.coord_system_id),
9622                description: Ok(value.description),
9623                document_set_id: Ok(value.document_set_id),
9624                domain: Ok(value.domain),
9625                input: Ok(value.input),
9626                method: Ok(value.method),
9627                model_id: Ok(value.model_id),
9628                model_name: Ok(value.model_name),
9629                model_type: Ok(value.model_type),
9630                remarks: Ok(value.remarks),
9631                uncertainty: Ok(value.uncertainty),
9632                usage: Ok(value.usage),
9633            }
9634        }
9635    }
9636    #[derive(Clone, Debug)]
9637    pub struct AgsiModelAlignment {
9638        agsi_geometry: ::std::result::Result<
9639            ::std::option::Option<super::AgsiGeometryFromFile>,
9640            ::std::string::String,
9641        >,
9642        alignment_id: ::std::result::Result<
9643            ::std::option::Option<::std::string::String>,
9644            ::std::string::String,
9645        >,
9646        alignment_name: ::std::result::Result<
9647            ::std::option::Option<::std::string::String>,
9648            ::std::string::String,
9649        >,
9650        description: ::std::result::Result<
9651            ::std::option::Option<::std::string::String>,
9652            ::std::string::String,
9653        >,
9654        remarks: ::std::result::Result<
9655            ::std::option::Option<::std::string::String>,
9656            ::std::string::String,
9657        >,
9658        start_chainage: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9659    }
9660    impl ::std::default::Default for AgsiModelAlignment {
9661        fn default() -> Self {
9662            Self {
9663                agsi_geometry: Ok(Default::default()),
9664                alignment_id: Ok(Default::default()),
9665                alignment_name: Ok(Default::default()),
9666                description: Ok(Default::default()),
9667                remarks: Ok(Default::default()),
9668                start_chainage: Ok(Default::default()),
9669            }
9670        }
9671    }
9672    impl AgsiModelAlignment {
9673        pub fn agsi_geometry<T>(mut self, value: T) -> Self
9674        where
9675            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
9676            T::Error: ::std::fmt::Display,
9677        {
9678            self.agsi_geometry = value
9679                .try_into()
9680                .map_err(|e| format!("error converting supplied value for agsi_geometry: {}", e));
9681            self
9682        }
9683        pub fn alignment_id<T>(mut self, value: T) -> Self
9684        where
9685            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9686            T::Error: ::std::fmt::Display,
9687        {
9688            self.alignment_id = value
9689                .try_into()
9690                .map_err(|e| format!("error converting supplied value for alignment_id: {}", e));
9691            self
9692        }
9693        pub fn alignment_name<T>(mut self, value: T) -> Self
9694        where
9695            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9696            T::Error: ::std::fmt::Display,
9697        {
9698            self.alignment_name = value
9699                .try_into()
9700                .map_err(|e| format!("error converting supplied value for alignment_name: {}", e));
9701            self
9702        }
9703        pub fn description<T>(mut self, value: T) -> Self
9704        where
9705            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9706            T::Error: ::std::fmt::Display,
9707        {
9708            self.description = value
9709                .try_into()
9710                .map_err(|e| format!("error converting supplied value for description: {}", e));
9711            self
9712        }
9713        pub fn remarks<T>(mut self, value: T) -> Self
9714        where
9715            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9716            T::Error: ::std::fmt::Display,
9717        {
9718            self.remarks = value
9719                .try_into()
9720                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
9721            self
9722        }
9723        pub fn start_chainage<T>(mut self, value: T) -> Self
9724        where
9725            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9726            T::Error: ::std::fmt::Display,
9727        {
9728            self.start_chainage = value
9729                .try_into()
9730                .map_err(|e| format!("error converting supplied value for start_chainage: {}", e));
9731            self
9732        }
9733    }
9734    impl ::std::convert::TryFrom<AgsiModelAlignment> for super::AgsiModelAlignment {
9735        type Error = super::error::ConversionError;
9736        fn try_from(
9737            value: AgsiModelAlignment,
9738        ) -> ::std::result::Result<Self, super::error::ConversionError> {
9739            Ok(Self {
9740                agsi_geometry: value.agsi_geometry?,
9741                alignment_id: value.alignment_id?,
9742                alignment_name: value.alignment_name?,
9743                description: value.description?,
9744                remarks: value.remarks?,
9745                start_chainage: value.start_chainage?,
9746            })
9747        }
9748    }
9749    impl ::std::convert::From<super::AgsiModelAlignment> for AgsiModelAlignment {
9750        fn from(value: super::AgsiModelAlignment) -> Self {
9751            Self {
9752                agsi_geometry: Ok(value.agsi_geometry),
9753                alignment_id: Ok(value.alignment_id),
9754                alignment_name: Ok(value.alignment_name),
9755                description: Ok(value.description),
9756                remarks: Ok(value.remarks),
9757                start_chainage: Ok(value.start_chainage),
9758            }
9759        }
9760    }
9761    #[derive(Clone, Debug)]
9762    pub struct AgsiModelBoundary {
9763        agsi_geometry_boundary_xy: ::std::result::Result<
9764            ::std::option::Option<super::AgsiGeometryFromFile>,
9765            ::std::string::String,
9766        >,
9767        agsi_geometry_surface_bottom: ::std::result::Result<
9768            ::std::option::Option<super::AgsiGeometryFromFile>,
9769            ::std::string::String,
9770        >,
9771        agsi_geometry_surface_top: ::std::result::Result<
9772            ::std::option::Option<super::AgsiGeometryFromFile>,
9773            ::std::string::String,
9774        >,
9775        bottom_elevation: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9776        boundary_id: ::std::result::Result<
9777            ::std::option::Option<::std::string::String>,
9778            ::std::string::String,
9779        >,
9780        description: ::std::result::Result<
9781            ::std::option::Option<::std::string::String>,
9782            ::std::string::String,
9783        >,
9784        max_x: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9785        max_y: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9786        min_x: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9787        min_y: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9788        remarks: ::std::result::Result<
9789            ::std::option::Option<::std::string::String>,
9790            ::std::string::String,
9791        >,
9792        top_elevation: ::std::result::Result<::std::option::Option<f64>, ::std::string::String>,
9793    }
9794    impl ::std::default::Default for AgsiModelBoundary {
9795        fn default() -> Self {
9796            Self {
9797                agsi_geometry_boundary_xy: Ok(Default::default()),
9798                agsi_geometry_surface_bottom: Ok(Default::default()),
9799                agsi_geometry_surface_top: Ok(Default::default()),
9800                bottom_elevation: Ok(Default::default()),
9801                boundary_id: Ok(Default::default()),
9802                description: Ok(Default::default()),
9803                max_x: Ok(Default::default()),
9804                max_y: Ok(Default::default()),
9805                min_x: Ok(Default::default()),
9806                min_y: Ok(Default::default()),
9807                remarks: Ok(Default::default()),
9808                top_elevation: Ok(Default::default()),
9809            }
9810        }
9811    }
9812    impl AgsiModelBoundary {
9813        pub fn agsi_geometry_boundary_xy<T>(mut self, value: T) -> Self
9814        where
9815            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
9816            T::Error: ::std::fmt::Display,
9817        {
9818            self.agsi_geometry_boundary_xy = value.try_into().map_err(|e| {
9819                format!(
9820                    "error converting supplied value for agsi_geometry_boundary_xy: {}",
9821                    e
9822                )
9823            });
9824            self
9825        }
9826        pub fn agsi_geometry_surface_bottom<T>(mut self, value: T) -> Self
9827        where
9828            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
9829            T::Error: ::std::fmt::Display,
9830        {
9831            self.agsi_geometry_surface_bottom = value.try_into().map_err(|e| {
9832                format!(
9833                    "error converting supplied value for agsi_geometry_surface_bottom: {}",
9834                    e
9835                )
9836            });
9837            self
9838        }
9839        pub fn agsi_geometry_surface_top<T>(mut self, value: T) -> Self
9840        where
9841            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
9842            T::Error: ::std::fmt::Display,
9843        {
9844            self.agsi_geometry_surface_top = value.try_into().map_err(|e| {
9845                format!(
9846                    "error converting supplied value for agsi_geometry_surface_top: {}",
9847                    e
9848                )
9849            });
9850            self
9851        }
9852        pub fn bottom_elevation<T>(mut self, value: T) -> Self
9853        where
9854            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9855            T::Error: ::std::fmt::Display,
9856        {
9857            self.bottom_elevation = value.try_into().map_err(|e| {
9858                format!(
9859                    "error converting supplied value for bottom_elevation: {}",
9860                    e
9861                )
9862            });
9863            self
9864        }
9865        pub fn boundary_id<T>(mut self, value: T) -> Self
9866        where
9867            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9868            T::Error: ::std::fmt::Display,
9869        {
9870            self.boundary_id = value
9871                .try_into()
9872                .map_err(|e| format!("error converting supplied value for boundary_id: {}", e));
9873            self
9874        }
9875        pub fn description<T>(mut self, value: T) -> Self
9876        where
9877            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9878            T::Error: ::std::fmt::Display,
9879        {
9880            self.description = value
9881                .try_into()
9882                .map_err(|e| format!("error converting supplied value for description: {}", e));
9883            self
9884        }
9885        pub fn max_x<T>(mut self, value: T) -> Self
9886        where
9887            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9888            T::Error: ::std::fmt::Display,
9889        {
9890            self.max_x = value
9891                .try_into()
9892                .map_err(|e| format!("error converting supplied value for max_x: {}", e));
9893            self
9894        }
9895        pub fn max_y<T>(mut self, value: T) -> Self
9896        where
9897            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9898            T::Error: ::std::fmt::Display,
9899        {
9900            self.max_y = value
9901                .try_into()
9902                .map_err(|e| format!("error converting supplied value for max_y: {}", e));
9903            self
9904        }
9905        pub fn min_x<T>(mut self, value: T) -> Self
9906        where
9907            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9908            T::Error: ::std::fmt::Display,
9909        {
9910            self.min_x = value
9911                .try_into()
9912                .map_err(|e| format!("error converting supplied value for min_x: {}", e));
9913            self
9914        }
9915        pub fn min_y<T>(mut self, value: T) -> Self
9916        where
9917            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9918            T::Error: ::std::fmt::Display,
9919        {
9920            self.min_y = value
9921                .try_into()
9922                .map_err(|e| format!("error converting supplied value for min_y: {}", e));
9923            self
9924        }
9925        pub fn remarks<T>(mut self, value: T) -> Self
9926        where
9927            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
9928            T::Error: ::std::fmt::Display,
9929        {
9930            self.remarks = value
9931                .try_into()
9932                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
9933            self
9934        }
9935        pub fn top_elevation<T>(mut self, value: T) -> Self
9936        where
9937            T: ::std::convert::TryInto<::std::option::Option<f64>>,
9938            T::Error: ::std::fmt::Display,
9939        {
9940            self.top_elevation = value
9941                .try_into()
9942                .map_err(|e| format!("error converting supplied value for top_elevation: {}", e));
9943            self
9944        }
9945    }
9946    impl ::std::convert::TryFrom<AgsiModelBoundary> for super::AgsiModelBoundary {
9947        type Error = super::error::ConversionError;
9948        fn try_from(
9949            value: AgsiModelBoundary,
9950        ) -> ::std::result::Result<Self, super::error::ConversionError> {
9951            Ok(Self {
9952                agsi_geometry_boundary_xy: value.agsi_geometry_boundary_xy?,
9953                agsi_geometry_surface_bottom: value.agsi_geometry_surface_bottom?,
9954                agsi_geometry_surface_top: value.agsi_geometry_surface_top?,
9955                bottom_elevation: value.bottom_elevation?,
9956                boundary_id: value.boundary_id?,
9957                description: value.description?,
9958                max_x: value.max_x?,
9959                max_y: value.max_y?,
9960                min_x: value.min_x?,
9961                min_y: value.min_y?,
9962                remarks: value.remarks?,
9963                top_elevation: value.top_elevation?,
9964            })
9965        }
9966    }
9967    impl ::std::convert::From<super::AgsiModelBoundary> for AgsiModelBoundary {
9968        fn from(value: super::AgsiModelBoundary) -> Self {
9969            Self {
9970                agsi_geometry_boundary_xy: Ok(value.agsi_geometry_boundary_xy),
9971                agsi_geometry_surface_bottom: Ok(value.agsi_geometry_surface_bottom),
9972                agsi_geometry_surface_top: Ok(value.agsi_geometry_surface_top),
9973                bottom_elevation: Ok(value.bottom_elevation),
9974                boundary_id: Ok(value.boundary_id),
9975                description: Ok(value.description),
9976                max_x: Ok(value.max_x),
9977                max_y: Ok(value.max_y),
9978                min_x: Ok(value.min_x),
9979                min_y: Ok(value.min_y),
9980                remarks: Ok(value.remarks),
9981                top_elevation: Ok(value.top_elevation),
9982            }
9983        }
9984    }
9985    #[derive(Clone, Debug)]
9986    pub struct AgsiModelElement {
9987        agsi_data_parameter_value: ::std::result::Result<
9988            ::std::vec::Vec<super::AgsiDataParameterValue>,
9989            ::std::string::String,
9990        >,
9991        agsi_data_property_from_file: ::std::result::Result<
9992            ::std::option::Option<super::AgsiDataPropertyFromFile>,
9993            ::std::string::String,
9994        >,
9995        agsi_data_property_summary: ::std::result::Result<
9996            ::std::vec::Vec<super::AgsiDataPropertySummary>,
9997            ::std::string::String,
9998        >,
9999        agsi_data_property_value: ::std::result::Result<
10000            ::std::vec::Vec<super::AgsiDataPropertyValue>,
10001            ::std::string::String,
10002        >,
10003        agsi_geometry: ::std::result::Result<
10004            ::std::option::Option<super::AgsiModelElementAgsiGeometry>,
10005            ::std::string::String,
10006        >,
10007        agsi_geometry_area_limit: ::std::result::Result<
10008            ::std::option::Option<super::AgsiGeometryFromFile>,
10009            ::std::string::String,
10010        >,
10011        colour_rgb: ::std::result::Result<
10012            ::std::option::Option<::std::string::String>,
10013            ::std::string::String,
10014        >,
10015        description: ::std::result::Result<
10016            ::std::option::Option<::std::string::String>,
10017            ::std::string::String,
10018        >,
10019        element_id: ::std::result::Result<
10020            ::std::option::Option<::std::string::String>,
10021            ::std::string::String,
10022        >,
10023        element_name: ::std::result::Result<
10024            ::std::option::Option<::std::string::String>,
10025            ::std::string::String,
10026        >,
10027        element_type: ::std::result::Result<
10028            ::std::option::Option<::std::string::String>,
10029            ::std::string::String,
10030        >,
10031        geometry_object: ::std::result::Result<
10032            ::std::option::Option<::std::string::String>,
10033            ::std::string::String,
10034        >,
10035        remarks: ::std::result::Result<
10036            ::std::option::Option<::std::string::String>,
10037            ::std::string::String,
10038        >,
10039    }
10040    impl ::std::default::Default for AgsiModelElement {
10041        fn default() -> Self {
10042            Self {
10043                agsi_data_parameter_value: Ok(Default::default()),
10044                agsi_data_property_from_file: Ok(Default::default()),
10045                agsi_data_property_summary: Ok(Default::default()),
10046                agsi_data_property_value: Ok(Default::default()),
10047                agsi_geometry: Ok(Default::default()),
10048                agsi_geometry_area_limit: Ok(Default::default()),
10049                colour_rgb: Ok(Default::default()),
10050                description: Ok(Default::default()),
10051                element_id: Ok(Default::default()),
10052                element_name: Ok(Default::default()),
10053                element_type: Ok(Default::default()),
10054                geometry_object: Ok(Default::default()),
10055                remarks: Ok(Default::default()),
10056            }
10057        }
10058    }
10059    impl AgsiModelElement {
10060        pub fn agsi_data_parameter_value<T>(mut self, value: T) -> Self
10061        where
10062            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataParameterValue>>,
10063            T::Error: ::std::fmt::Display,
10064        {
10065            self.agsi_data_parameter_value = value.try_into().map_err(|e| {
10066                format!(
10067                    "error converting supplied value for agsi_data_parameter_value: {}",
10068                    e
10069                )
10070            });
10071            self
10072        }
10073        pub fn agsi_data_property_from_file<T>(mut self, value: T) -> Self
10074        where
10075            T: ::std::convert::TryInto<::std::option::Option<super::AgsiDataPropertyFromFile>>,
10076            T::Error: ::std::fmt::Display,
10077        {
10078            self.agsi_data_property_from_file = value.try_into().map_err(|e| {
10079                format!(
10080                    "error converting supplied value for agsi_data_property_from_file: {}",
10081                    e
10082                )
10083            });
10084            self
10085        }
10086        pub fn agsi_data_property_summary<T>(mut self, value: T) -> Self
10087        where
10088            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataPropertySummary>>,
10089            T::Error: ::std::fmt::Display,
10090        {
10091            self.agsi_data_property_summary = value.try_into().map_err(|e| {
10092                format!(
10093                    "error converting supplied value for agsi_data_property_summary: {}",
10094                    e
10095                )
10096            });
10097            self
10098        }
10099        pub fn agsi_data_property_value<T>(mut self, value: T) -> Self
10100        where
10101            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataPropertyValue>>,
10102            T::Error: ::std::fmt::Display,
10103        {
10104            self.agsi_data_property_value = value.try_into().map_err(|e| {
10105                format!(
10106                    "error converting supplied value for agsi_data_property_value: {}",
10107                    e
10108                )
10109            });
10110            self
10111        }
10112        pub fn agsi_geometry<T>(mut self, value: T) -> Self
10113        where
10114            T: ::std::convert::TryInto<::std::option::Option<super::AgsiModelElementAgsiGeometry>>,
10115            T::Error: ::std::fmt::Display,
10116        {
10117            self.agsi_geometry = value
10118                .try_into()
10119                .map_err(|e| format!("error converting supplied value for agsi_geometry: {}", e));
10120            self
10121        }
10122        pub fn agsi_geometry_area_limit<T>(mut self, value: T) -> Self
10123        where
10124            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
10125            T::Error: ::std::fmt::Display,
10126        {
10127            self.agsi_geometry_area_limit = value.try_into().map_err(|e| {
10128                format!(
10129                    "error converting supplied value for agsi_geometry_area_limit: {}",
10130                    e
10131                )
10132            });
10133            self
10134        }
10135        pub fn colour_rgb<T>(mut self, value: T) -> Self
10136        where
10137            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10138            T::Error: ::std::fmt::Display,
10139        {
10140            self.colour_rgb = value
10141                .try_into()
10142                .map_err(|e| format!("error converting supplied value for colour_rgb: {}", e));
10143            self
10144        }
10145        pub fn description<T>(mut self, value: T) -> Self
10146        where
10147            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10148            T::Error: ::std::fmt::Display,
10149        {
10150            self.description = value
10151                .try_into()
10152                .map_err(|e| format!("error converting supplied value for description: {}", e));
10153            self
10154        }
10155        pub fn element_id<T>(mut self, value: T) -> Self
10156        where
10157            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10158            T::Error: ::std::fmt::Display,
10159        {
10160            self.element_id = value
10161                .try_into()
10162                .map_err(|e| format!("error converting supplied value for element_id: {}", e));
10163            self
10164        }
10165        pub fn element_name<T>(mut self, value: T) -> Self
10166        where
10167            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10168            T::Error: ::std::fmt::Display,
10169        {
10170            self.element_name = value
10171                .try_into()
10172                .map_err(|e| format!("error converting supplied value for element_name: {}", e));
10173            self
10174        }
10175        pub fn element_type<T>(mut self, value: T) -> Self
10176        where
10177            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10178            T::Error: ::std::fmt::Display,
10179        {
10180            self.element_type = value
10181                .try_into()
10182                .map_err(|e| format!("error converting supplied value for element_type: {}", e));
10183            self
10184        }
10185        pub fn geometry_object<T>(mut self, value: T) -> Self
10186        where
10187            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10188            T::Error: ::std::fmt::Display,
10189        {
10190            self.geometry_object = value
10191                .try_into()
10192                .map_err(|e| format!("error converting supplied value for geometry_object: {}", e));
10193            self
10194        }
10195        pub fn remarks<T>(mut self, value: T) -> Self
10196        where
10197            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10198            T::Error: ::std::fmt::Display,
10199        {
10200            self.remarks = value
10201                .try_into()
10202                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
10203            self
10204        }
10205    }
10206    impl ::std::convert::TryFrom<AgsiModelElement> for super::AgsiModelElement {
10207        type Error = super::error::ConversionError;
10208        fn try_from(
10209            value: AgsiModelElement,
10210        ) -> ::std::result::Result<Self, super::error::ConversionError> {
10211            Ok(Self {
10212                agsi_data_parameter_value: value.agsi_data_parameter_value?,
10213                agsi_data_property_from_file: value.agsi_data_property_from_file?,
10214                agsi_data_property_summary: value.agsi_data_property_summary?,
10215                agsi_data_property_value: value.agsi_data_property_value?,
10216                agsi_geometry: value.agsi_geometry?,
10217                agsi_geometry_area_limit: value.agsi_geometry_area_limit?,
10218                colour_rgb: value.colour_rgb?,
10219                description: value.description?,
10220                element_id: value.element_id?,
10221                element_name: value.element_name?,
10222                element_type: value.element_type?,
10223                geometry_object: value.geometry_object?,
10224                remarks: value.remarks?,
10225            })
10226        }
10227    }
10228    impl ::std::convert::From<super::AgsiModelElement> for AgsiModelElement {
10229        fn from(value: super::AgsiModelElement) -> Self {
10230            Self {
10231                agsi_data_parameter_value: Ok(value.agsi_data_parameter_value),
10232                agsi_data_property_from_file: Ok(value.agsi_data_property_from_file),
10233                agsi_data_property_summary: Ok(value.agsi_data_property_summary),
10234                agsi_data_property_value: Ok(value.agsi_data_property_value),
10235                agsi_geometry: Ok(value.agsi_geometry),
10236                agsi_geometry_area_limit: Ok(value.agsi_geometry_area_limit),
10237                colour_rgb: Ok(value.colour_rgb),
10238                description: Ok(value.description),
10239                element_id: Ok(value.element_id),
10240                element_name: Ok(value.element_name),
10241                element_type: Ok(value.element_type),
10242                geometry_object: Ok(value.geometry_object),
10243                remarks: Ok(value.remarks),
10244            }
10245        }
10246    }
10247    #[derive(Clone, Debug)]
10248    pub struct AgsiModelElementAgsiGeometry {
10249        subtype_0: ::std::result::Result<
10250            ::std::option::Option<super::AgsiGeometryVolFromSurfaces>,
10251            ::std::string::String,
10252        >,
10253        subtype_1: ::std::result::Result<
10254            ::std::option::Option<super::AgsiGeometryFromFile>,
10255            ::std::string::String,
10256        >,
10257        subtype_2: ::std::result::Result<
10258            ::std::option::Option<super::AgsiGeometryAreaFromLines>,
10259            ::std::string::String,
10260        >,
10261        subtype_3: ::std::result::Result<
10262            ::std::option::Option<super::AgsiGeometryPlane>,
10263            ::std::string::String,
10264        >,
10265        subtype_4: ::std::result::Result<
10266            ::std::option::Option<super::AgsiGeometryLayer>,
10267            ::std::string::String,
10268        >,
10269    }
10270    impl ::std::default::Default for AgsiModelElementAgsiGeometry {
10271        fn default() -> Self {
10272            Self {
10273                subtype_0: Ok(Default::default()),
10274                subtype_1: Ok(Default::default()),
10275                subtype_2: Ok(Default::default()),
10276                subtype_3: Ok(Default::default()),
10277                subtype_4: Ok(Default::default()),
10278            }
10279        }
10280    }
10281    impl AgsiModelElementAgsiGeometry {
10282        pub fn subtype_0<T>(mut self, value: T) -> Self
10283        where
10284            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryVolFromSurfaces>>,
10285            T::Error: ::std::fmt::Display,
10286        {
10287            self.subtype_0 = value
10288                .try_into()
10289                .map_err(|e| format!("error converting supplied value for subtype_0: {}", e));
10290            self
10291        }
10292        pub fn subtype_1<T>(mut self, value: T) -> Self
10293        where
10294            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
10295            T::Error: ::std::fmt::Display,
10296        {
10297            self.subtype_1 = value
10298                .try_into()
10299                .map_err(|e| format!("error converting supplied value for subtype_1: {}", e));
10300            self
10301        }
10302        pub fn subtype_2<T>(mut self, value: T) -> Self
10303        where
10304            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryAreaFromLines>>,
10305            T::Error: ::std::fmt::Display,
10306        {
10307            self.subtype_2 = value
10308                .try_into()
10309                .map_err(|e| format!("error converting supplied value for subtype_2: {}", e));
10310            self
10311        }
10312        pub fn subtype_3<T>(mut self, value: T) -> Self
10313        where
10314            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryPlane>>,
10315            T::Error: ::std::fmt::Display,
10316        {
10317            self.subtype_3 = value
10318                .try_into()
10319                .map_err(|e| format!("error converting supplied value for subtype_3: {}", e));
10320            self
10321        }
10322        pub fn subtype_4<T>(mut self, value: T) -> Self
10323        where
10324            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryLayer>>,
10325            T::Error: ::std::fmt::Display,
10326        {
10327            self.subtype_4 = value
10328                .try_into()
10329                .map_err(|e| format!("error converting supplied value for subtype_4: {}", e));
10330            self
10331        }
10332    }
10333    impl ::std::convert::TryFrom<AgsiModelElementAgsiGeometry> for super::AgsiModelElementAgsiGeometry {
10334        type Error = super::error::ConversionError;
10335        fn try_from(
10336            value: AgsiModelElementAgsiGeometry,
10337        ) -> ::std::result::Result<Self, super::error::ConversionError> {
10338            Ok(Self {
10339                subtype_0: value.subtype_0?,
10340                subtype_1: value.subtype_1?,
10341                subtype_2: value.subtype_2?,
10342                subtype_3: value.subtype_3?,
10343                subtype_4: value.subtype_4?,
10344            })
10345        }
10346    }
10347    impl ::std::convert::From<super::AgsiModelElementAgsiGeometry> for AgsiModelElementAgsiGeometry {
10348        fn from(value: super::AgsiModelElementAgsiGeometry) -> Self {
10349            Self {
10350                subtype_0: Ok(value.subtype_0),
10351                subtype_1: Ok(value.subtype_1),
10352                subtype_2: Ok(value.subtype_2),
10353                subtype_3: Ok(value.subtype_3),
10354                subtype_4: Ok(value.subtype_4),
10355            }
10356        }
10357    }
10358    #[derive(Clone, Debug)]
10359    pub struct AgsiObservationPoint {
10360        agsi_data_property_from_file: ::std::result::Result<
10361            ::std::option::Option<super::AgsiDataPropertyFromFile>,
10362            ::std::string::String,
10363        >,
10364        agsi_data_property_value: ::std::result::Result<
10365            ::std::vec::Vec<super::AgsiDataPropertyValue>,
10366            ::std::string::String,
10367        >,
10368        coordinate: ::std::result::Result<super::CoordinateTuple, ::std::string::String>,
10369        date: ::std::result::Result<
10370            ::std::option::Option<::chrono::naive::NaiveDate>,
10371            ::std::string::String,
10372        >,
10373        made_by: ::std::result::Result<
10374            ::std::option::Option<::std::string::String>,
10375            ::std::string::String,
10376        >,
10377        observation_id: ::std::result::Result<
10378            ::std::option::Option<::std::string::String>,
10379            ::std::string::String,
10380        >,
10381        observation_nature: ::std::result::Result<
10382            ::std::option::Option<::std::string::String>,
10383            ::std::string::String,
10384        >,
10385        observation_text: ::std::result::Result<
10386            ::std::option::Option<::std::string::String>,
10387            ::std::string::String,
10388        >,
10389        remarks: ::std::result::Result<
10390            ::std::option::Option<::std::string::String>,
10391            ::std::string::String,
10392        >,
10393    }
10394    impl ::std::default::Default for AgsiObservationPoint {
10395        fn default() -> Self {
10396            Self {
10397                agsi_data_property_from_file: Ok(Default::default()),
10398                agsi_data_property_value: Ok(Default::default()),
10399                coordinate: Err("no value supplied for coordinate".to_string()),
10400                date: Ok(Default::default()),
10401                made_by: Ok(Default::default()),
10402                observation_id: Ok(Default::default()),
10403                observation_nature: Ok(Default::default()),
10404                observation_text: Ok(Default::default()),
10405                remarks: Ok(Default::default()),
10406            }
10407        }
10408    }
10409    impl AgsiObservationPoint {
10410        pub fn agsi_data_property_from_file<T>(mut self, value: T) -> Self
10411        where
10412            T: ::std::convert::TryInto<::std::option::Option<super::AgsiDataPropertyFromFile>>,
10413            T::Error: ::std::fmt::Display,
10414        {
10415            self.agsi_data_property_from_file = value.try_into().map_err(|e| {
10416                format!(
10417                    "error converting supplied value for agsi_data_property_from_file: {}",
10418                    e
10419                )
10420            });
10421            self
10422        }
10423        pub fn agsi_data_property_value<T>(mut self, value: T) -> Self
10424        where
10425            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataPropertyValue>>,
10426            T::Error: ::std::fmt::Display,
10427        {
10428            self.agsi_data_property_value = value.try_into().map_err(|e| {
10429                format!(
10430                    "error converting supplied value for agsi_data_property_value: {}",
10431                    e
10432                )
10433            });
10434            self
10435        }
10436        pub fn coordinate<T>(mut self, value: T) -> Self
10437        where
10438            T: ::std::convert::TryInto<super::CoordinateTuple>,
10439            T::Error: ::std::fmt::Display,
10440        {
10441            self.coordinate = value
10442                .try_into()
10443                .map_err(|e| format!("error converting supplied value for coordinate: {}", e));
10444            self
10445        }
10446        pub fn date<T>(mut self, value: T) -> Self
10447        where
10448            T: ::std::convert::TryInto<::std::option::Option<::chrono::naive::NaiveDate>>,
10449            T::Error: ::std::fmt::Display,
10450        {
10451            self.date = value
10452                .try_into()
10453                .map_err(|e| format!("error converting supplied value for date: {}", e));
10454            self
10455        }
10456        pub fn made_by<T>(mut self, value: T) -> Self
10457        where
10458            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10459            T::Error: ::std::fmt::Display,
10460        {
10461            self.made_by = value
10462                .try_into()
10463                .map_err(|e| format!("error converting supplied value for made_by: {}", e));
10464            self
10465        }
10466        pub fn observation_id<T>(mut self, value: T) -> Self
10467        where
10468            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10469            T::Error: ::std::fmt::Display,
10470        {
10471            self.observation_id = value
10472                .try_into()
10473                .map_err(|e| format!("error converting supplied value for observation_id: {}", e));
10474            self
10475        }
10476        pub fn observation_nature<T>(mut self, value: T) -> Self
10477        where
10478            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10479            T::Error: ::std::fmt::Display,
10480        {
10481            self.observation_nature = value.try_into().map_err(|e| {
10482                format!(
10483                    "error converting supplied value for observation_nature: {}",
10484                    e
10485                )
10486            });
10487            self
10488        }
10489        pub fn observation_text<T>(mut self, value: T) -> Self
10490        where
10491            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10492            T::Error: ::std::fmt::Display,
10493        {
10494            self.observation_text = value.try_into().map_err(|e| {
10495                format!(
10496                    "error converting supplied value for observation_text: {}",
10497                    e
10498                )
10499            });
10500            self
10501        }
10502        pub fn remarks<T>(mut self, value: T) -> Self
10503        where
10504            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10505            T::Error: ::std::fmt::Display,
10506        {
10507            self.remarks = value
10508                .try_into()
10509                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
10510            self
10511        }
10512    }
10513    impl ::std::convert::TryFrom<AgsiObservationPoint> for super::AgsiObservationPoint {
10514        type Error = super::error::ConversionError;
10515        fn try_from(
10516            value: AgsiObservationPoint,
10517        ) -> ::std::result::Result<Self, super::error::ConversionError> {
10518            Ok(Self {
10519                agsi_data_property_from_file: value.agsi_data_property_from_file?,
10520                agsi_data_property_value: value.agsi_data_property_value?,
10521                coordinate: value.coordinate?,
10522                date: value.date?,
10523                made_by: value.made_by?,
10524                observation_id: value.observation_id?,
10525                observation_nature: value.observation_nature?,
10526                observation_text: value.observation_text?,
10527                remarks: value.remarks?,
10528            })
10529        }
10530    }
10531    impl ::std::convert::From<super::AgsiObservationPoint> for AgsiObservationPoint {
10532        fn from(value: super::AgsiObservationPoint) -> Self {
10533            Self {
10534                agsi_data_property_from_file: Ok(value.agsi_data_property_from_file),
10535                agsi_data_property_value: Ok(value.agsi_data_property_value),
10536                coordinate: Ok(value.coordinate),
10537                date: Ok(value.date),
10538                made_by: Ok(value.made_by),
10539                observation_id: Ok(value.observation_id),
10540                observation_nature: Ok(value.observation_nature),
10541                observation_text: Ok(value.observation_text),
10542                remarks: Ok(value.remarks),
10543            }
10544        }
10545    }
10546    #[derive(Clone, Debug)]
10547    pub struct AgsiObservationSet {
10548        agsi_data_property_from_file: ::std::result::Result<
10549            ::std::option::Option<super::AgsiDataPropertyFromFile>,
10550            ::std::string::String,
10551        >,
10552        agsi_geometry_from_file: ::std::result::Result<
10553            ::std::option::Option<super::AgsiGeometryFromFile>,
10554            ::std::string::String,
10555        >,
10556        agsi_observation_exp_hole: ::std::result::Result<
10557            ::std::vec::Vec<super::AgsiObservationExpHole>,
10558            ::std::string::String,
10559        >,
10560        agsi_observation_point: ::std::result::Result<
10561            ::std::vec::Vec<super::AgsiObservationPoint>,
10562            ::std::string::String,
10563        >,
10564        agsi_observation_shape: ::std::result::Result<
10565            ::std::vec::Vec<super::AgsiObservationShape>,
10566            ::std::string::String,
10567        >,
10568        description: ::std::result::Result<
10569            ::std::option::Option<::std::string::String>,
10570            ::std::string::String,
10571        >,
10572        document_set_id: ::std::result::Result<
10573            ::std::option::Option<::std::string::String>,
10574            ::std::string::String,
10575        >,
10576        investigation_id: ::std::result::Result<
10577            ::std::option::Option<::std::string::String>,
10578            ::std::string::String,
10579        >,
10580        observation_set_id: ::std::result::Result<
10581            ::std::option::Option<::std::string::String>,
10582            ::std::string::String,
10583        >,
10584        remarks: ::std::result::Result<
10585            ::std::option::Option<::std::string::String>,
10586            ::std::string::String,
10587        >,
10588    }
10589    impl ::std::default::Default for AgsiObservationSet {
10590        fn default() -> Self {
10591            Self {
10592                agsi_data_property_from_file: Ok(Default::default()),
10593                agsi_geometry_from_file: Ok(Default::default()),
10594                agsi_observation_exp_hole: Ok(Default::default()),
10595                agsi_observation_point: Ok(Default::default()),
10596                agsi_observation_shape: Ok(Default::default()),
10597                description: Ok(Default::default()),
10598                document_set_id: Ok(Default::default()),
10599                investigation_id: Ok(Default::default()),
10600                observation_set_id: Ok(Default::default()),
10601                remarks: Ok(Default::default()),
10602            }
10603        }
10604    }
10605    impl AgsiObservationSet {
10606        pub fn agsi_data_property_from_file<T>(mut self, value: T) -> Self
10607        where
10608            T: ::std::convert::TryInto<::std::option::Option<super::AgsiDataPropertyFromFile>>,
10609            T::Error: ::std::fmt::Display,
10610        {
10611            self.agsi_data_property_from_file = value.try_into().map_err(|e| {
10612                format!(
10613                    "error converting supplied value for agsi_data_property_from_file: {}",
10614                    e
10615                )
10616            });
10617            self
10618        }
10619        pub fn agsi_geometry_from_file<T>(mut self, value: T) -> Self
10620        where
10621            T: ::std::convert::TryInto<::std::option::Option<super::AgsiGeometryFromFile>>,
10622            T::Error: ::std::fmt::Display,
10623        {
10624            self.agsi_geometry_from_file = value.try_into().map_err(|e| {
10625                format!(
10626                    "error converting supplied value for agsi_geometry_from_file: {}",
10627                    e
10628                )
10629            });
10630            self
10631        }
10632        pub fn agsi_observation_exp_hole<T>(mut self, value: T) -> Self
10633        where
10634            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiObservationExpHole>>,
10635            T::Error: ::std::fmt::Display,
10636        {
10637            self.agsi_observation_exp_hole = value.try_into().map_err(|e| {
10638                format!(
10639                    "error converting supplied value for agsi_observation_exp_hole: {}",
10640                    e
10641                )
10642            });
10643            self
10644        }
10645        pub fn agsi_observation_point<T>(mut self, value: T) -> Self
10646        where
10647            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiObservationPoint>>,
10648            T::Error: ::std::fmt::Display,
10649        {
10650            self.agsi_observation_point = value.try_into().map_err(|e| {
10651                format!(
10652                    "error converting supplied value for agsi_observation_point: {}",
10653                    e
10654                )
10655            });
10656            self
10657        }
10658        pub fn agsi_observation_shape<T>(mut self, value: T) -> Self
10659        where
10660            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiObservationShape>>,
10661            T::Error: ::std::fmt::Display,
10662        {
10663            self.agsi_observation_shape = value.try_into().map_err(|e| {
10664                format!(
10665                    "error converting supplied value for agsi_observation_shape: {}",
10666                    e
10667                )
10668            });
10669            self
10670        }
10671        pub fn description<T>(mut self, value: T) -> Self
10672        where
10673            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10674            T::Error: ::std::fmt::Display,
10675        {
10676            self.description = value
10677                .try_into()
10678                .map_err(|e| format!("error converting supplied value for description: {}", e));
10679            self
10680        }
10681        pub fn document_set_id<T>(mut self, value: T) -> Self
10682        where
10683            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10684            T::Error: ::std::fmt::Display,
10685        {
10686            self.document_set_id = value
10687                .try_into()
10688                .map_err(|e| format!("error converting supplied value for document_set_id: {}", e));
10689            self
10690        }
10691        pub fn investigation_id<T>(mut self, value: T) -> Self
10692        where
10693            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10694            T::Error: ::std::fmt::Display,
10695        {
10696            self.investigation_id = value.try_into().map_err(|e| {
10697                format!(
10698                    "error converting supplied value for investigation_id: {}",
10699                    e
10700                )
10701            });
10702            self
10703        }
10704        pub fn observation_set_id<T>(mut self, value: T) -> Self
10705        where
10706            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10707            T::Error: ::std::fmt::Display,
10708        {
10709            self.observation_set_id = value.try_into().map_err(|e| {
10710                format!(
10711                    "error converting supplied value for observation_set_id: {}",
10712                    e
10713                )
10714            });
10715            self
10716        }
10717        pub fn remarks<T>(mut self, value: T) -> Self
10718        where
10719            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10720            T::Error: ::std::fmt::Display,
10721        {
10722            self.remarks = value
10723                .try_into()
10724                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
10725            self
10726        }
10727    }
10728    impl ::std::convert::TryFrom<AgsiObservationSet> for super::AgsiObservationSet {
10729        type Error = super::error::ConversionError;
10730        fn try_from(
10731            value: AgsiObservationSet,
10732        ) -> ::std::result::Result<Self, super::error::ConversionError> {
10733            Ok(Self {
10734                agsi_data_property_from_file: value.agsi_data_property_from_file?,
10735                agsi_geometry_from_file: value.agsi_geometry_from_file?,
10736                agsi_observation_exp_hole: value.agsi_observation_exp_hole?,
10737                agsi_observation_point: value.agsi_observation_point?,
10738                agsi_observation_shape: value.agsi_observation_shape?,
10739                description: value.description?,
10740                document_set_id: value.document_set_id?,
10741                investigation_id: value.investigation_id?,
10742                observation_set_id: value.observation_set_id?,
10743                remarks: value.remarks?,
10744            })
10745        }
10746    }
10747    impl ::std::convert::From<super::AgsiObservationSet> for AgsiObservationSet {
10748        fn from(value: super::AgsiObservationSet) -> Self {
10749            Self {
10750                agsi_data_property_from_file: Ok(value.agsi_data_property_from_file),
10751                agsi_geometry_from_file: Ok(value.agsi_geometry_from_file),
10752                agsi_observation_exp_hole: Ok(value.agsi_observation_exp_hole),
10753                agsi_observation_point: Ok(value.agsi_observation_point),
10754                agsi_observation_shape: Ok(value.agsi_observation_shape),
10755                description: Ok(value.description),
10756                document_set_id: Ok(value.document_set_id),
10757                investigation_id: Ok(value.investigation_id),
10758                observation_set_id: Ok(value.observation_set_id),
10759                remarks: Ok(value.remarks),
10760            }
10761        }
10762    }
10763    #[derive(Clone, Debug)]
10764    pub struct AgsiObservationShape {
10765        agsi_data_property_from_file: ::std::result::Result<
10766            ::std::option::Option<super::AgsiDataPropertyFromFile>,
10767            ::std::string::String,
10768        >,
10769        agsi_data_property_value: ::std::result::Result<
10770            ::std::vec::Vec<super::AgsiDataPropertyValue>,
10771            ::std::string::String,
10772        >,
10773        agsi_geometry_from_file:
10774            ::std::result::Result<super::AgsiGeometryFromFile, ::std::string::String>,
10775        date: ::std::result::Result<
10776            ::std::option::Option<::chrono::naive::NaiveDate>,
10777            ::std::string::String,
10778        >,
10779        made_by: ::std::result::Result<
10780            ::std::option::Option<::std::string::String>,
10781            ::std::string::String,
10782        >,
10783        observation_id: ::std::result::Result<
10784            ::std::option::Option<::std::string::String>,
10785            ::std::string::String,
10786        >,
10787        observation_nature: ::std::result::Result<
10788            ::std::option::Option<::std::string::String>,
10789            ::std::string::String,
10790        >,
10791        observation_text: ::std::result::Result<
10792            ::std::option::Option<::std::string::String>,
10793            ::std::string::String,
10794        >,
10795        remarks: ::std::result::Result<
10796            ::std::option::Option<::std::string::String>,
10797            ::std::string::String,
10798        >,
10799    }
10800    impl ::std::default::Default for AgsiObservationShape {
10801        fn default() -> Self {
10802            Self {
10803                agsi_data_property_from_file: Ok(Default::default()),
10804                agsi_data_property_value: Ok(Default::default()),
10805                agsi_geometry_from_file: Err(
10806                    "no value supplied for agsi_geometry_from_file".to_string()
10807                ),
10808                date: Ok(Default::default()),
10809                made_by: Ok(Default::default()),
10810                observation_id: Ok(Default::default()),
10811                observation_nature: Ok(Default::default()),
10812                observation_text: Ok(Default::default()),
10813                remarks: Ok(Default::default()),
10814            }
10815        }
10816    }
10817    impl AgsiObservationShape {
10818        pub fn agsi_data_property_from_file<T>(mut self, value: T) -> Self
10819        where
10820            T: ::std::convert::TryInto<::std::option::Option<super::AgsiDataPropertyFromFile>>,
10821            T::Error: ::std::fmt::Display,
10822        {
10823            self.agsi_data_property_from_file = value.try_into().map_err(|e| {
10824                format!(
10825                    "error converting supplied value for agsi_data_property_from_file: {}",
10826                    e
10827                )
10828            });
10829            self
10830        }
10831        pub fn agsi_data_property_value<T>(mut self, value: T) -> Self
10832        where
10833            T: ::std::convert::TryInto<::std::vec::Vec<super::AgsiDataPropertyValue>>,
10834            T::Error: ::std::fmt::Display,
10835        {
10836            self.agsi_data_property_value = value.try_into().map_err(|e| {
10837                format!(
10838                    "error converting supplied value for agsi_data_property_value: {}",
10839                    e
10840                )
10841            });
10842            self
10843        }
10844        pub fn agsi_geometry_from_file<T>(mut self, value: T) -> Self
10845        where
10846            T: ::std::convert::TryInto<super::AgsiGeometryFromFile>,
10847            T::Error: ::std::fmt::Display,
10848        {
10849            self.agsi_geometry_from_file = value.try_into().map_err(|e| {
10850                format!(
10851                    "error converting supplied value for agsi_geometry_from_file: {}",
10852                    e
10853                )
10854            });
10855            self
10856        }
10857        pub fn date<T>(mut self, value: T) -> Self
10858        where
10859            T: ::std::convert::TryInto<::std::option::Option<::chrono::naive::NaiveDate>>,
10860            T::Error: ::std::fmt::Display,
10861        {
10862            self.date = value
10863                .try_into()
10864                .map_err(|e| format!("error converting supplied value for date: {}", e));
10865            self
10866        }
10867        pub fn made_by<T>(mut self, value: T) -> Self
10868        where
10869            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10870            T::Error: ::std::fmt::Display,
10871        {
10872            self.made_by = value
10873                .try_into()
10874                .map_err(|e| format!("error converting supplied value for made_by: {}", e));
10875            self
10876        }
10877        pub fn observation_id<T>(mut self, value: T) -> Self
10878        where
10879            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10880            T::Error: ::std::fmt::Display,
10881        {
10882            self.observation_id = value
10883                .try_into()
10884                .map_err(|e| format!("error converting supplied value for observation_id: {}", e));
10885            self
10886        }
10887        pub fn observation_nature<T>(mut self, value: T) -> Self
10888        where
10889            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10890            T::Error: ::std::fmt::Display,
10891        {
10892            self.observation_nature = value.try_into().map_err(|e| {
10893                format!(
10894                    "error converting supplied value for observation_nature: {}",
10895                    e
10896                )
10897            });
10898            self
10899        }
10900        pub fn observation_text<T>(mut self, value: T) -> Self
10901        where
10902            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10903            T::Error: ::std::fmt::Display,
10904        {
10905            self.observation_text = value.try_into().map_err(|e| {
10906                format!(
10907                    "error converting supplied value for observation_text: {}",
10908                    e
10909                )
10910            });
10911            self
10912        }
10913        pub fn remarks<T>(mut self, value: T) -> Self
10914        where
10915            T: ::std::convert::TryInto<::std::option::Option<::std::string::String>>,
10916            T::Error: ::std::fmt::Display,
10917        {
10918            self.remarks = value
10919                .try_into()
10920                .map_err(|e| format!("error converting supplied value for remarks: {}", e));
10921            self
10922        }
10923    }
10924    impl ::std::convert::TryFrom<AgsiObservationShape> for super::AgsiObservationShape {
10925        type Error = super::error::ConversionError;
10926        fn try_from(
10927            value: AgsiObservationShape,
10928        ) -> ::std::result::Result<Self, super::error::ConversionError> {
10929            Ok(Self {
10930                agsi_data_property_from_file: value.agsi_data_property_from_file?,
10931                agsi_data_property_value: value.agsi_data_property_value?,
10932                agsi_geometry_from_file: value.agsi_geometry_from_file?,
10933                date: value.date?,
10934                made_by: value.made_by?,
10935                observation_id: value.observation_id?,
10936                observation_nature: value.observation_nature?,
10937                observation_text: value.observation_text?,
10938                remarks: value.remarks?,
10939            })
10940        }
10941    }
10942    impl ::std::convert::From<super::AgsiObservationShape> for AgsiObservationShape {
10943        fn from(value: super::AgsiObservationShape) -> Self {
10944            Self {
10945                agsi_data_property_from_file: Ok(value.agsi_data_property_from_file),
10946                agsi_data_property_value: Ok(value.agsi_data_property_value),
10947                agsi_geometry_from_file: Ok(value.agsi_geometry_from_file),
10948                date: Ok(value.date),
10949                made_by: Ok(value.made_by),
10950                observation_id: Ok(value.observation_id),
10951                observation_nature: Ok(value.observation_nature),
10952                observation_text: Ok(value.observation_text),
10953                remarks: Ok(value.remarks),
10954            }
10955        }
10956    }
10957}