apivolve_generator_api/gen1/data/
declared.rs

1use ::serde::Deserialize;
2use ::serde::Serialize;
3
4use crate::gen1::data::{Typ, TypId};
5use crate::util::Identifier;
6
7//TODO @mark: are maps needed? how to deal with static vs dynamic type of keys and values? 4 combis?
8
9#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
10#[serde(deny_unknown_fields)]
11pub struct UnionType {
12    id: TypId,
13    name: Option<Identifier>,
14    options: Vec<NamedType>,
15}
16
17impl UnionType {
18    pub fn new(name: Option<Identifier>, options: impl Into<Vec<NamedType>>) -> Self {
19        UnionType {
20            id: 0, //TODO @mark:
21            name,
22            options: options.into(),
23        }
24    }
25}
26
27#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
28#[serde(deny_unknown_fields)]
29pub struct RecordType {
30    id: TypId,
31    name: Option<Identifier>,
32    values: Vec<NamedType>,
33}
34
35impl RecordType {
36    pub fn new(name: Option<Identifier>, values: impl Into<Vec<NamedType>>) -> Self {
37        RecordType {
38            id: 0, //TODO @mark:
39            name,
40            values: values.into(),
41        }
42    }
43
44    pub fn named(name: Identifier, values: impl Into<Vec<NamedType>>) -> Self {
45        RecordType::new(Some(name), values)
46    }
47}
48
49#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
50#[serde(deny_unknown_fields)]
51pub struct NamedType {
52    name: Identifier,
53    typ: Typ,
54}
55
56impl NamedType {
57    pub fn new(name: Identifier, typ: Typ) -> Self {
58        NamedType { name, typ }
59    }
60}