Skip to main content

nominal_api_conjure/conjure/objects/ingest/api/
csv_opts.rs

1/// Options for ingesting csv files.  Supported file formats include .csv, .csv.gz
2#[derive(
3    Debug,
4    Clone,
5    conjure_object::serde::Serialize,
6    conjure_object::serde::Deserialize,
7    PartialEq,
8    Eq,
9    PartialOrd,
10    Ord,
11    Hash
12)]
13#[serde(crate = "conjure_object::serde")]
14#[conjure_object::private::staged_builder::staged_builder]
15#[builder(crate = conjure_object::private::staged_builder, update, inline)]
16pub struct CsvOpts {
17    #[builder(custom(type = super::IngestSource, convert = Box::new))]
18    #[serde(rename = "source")]
19    source: Box<super::IngestSource>,
20    #[builder(custom(type = super::DatasetIngestTarget, convert = Box::new))]
21    #[serde(rename = "target")]
22    target: Box<super::DatasetIngestTarget>,
23    #[builder(custom(type = super::TimestampMetadata, convert = Box::new))]
24    #[serde(rename = "timestampMetadata")]
25    timestamp_metadata: Box<super::TimestampMetadata>,
26    #[builder(default)]
27    #[serde(rename = "channelPrefix", skip_serializing_if = "Option::is_none", default)]
28    channel_prefix: super::ChannelPrefix,
29    #[builder(
30        default,
31        map(
32            key(type = super::super::super::api::ColumnName),
33            value(type = super::super::super::api::Channel)
34        )
35    )]
36    #[serde(
37        rename = "channelNameOverrides",
38        skip_serializing_if = "std::collections::BTreeMap::is_empty",
39        default
40    )]
41    channel_name_overrides: std::collections::BTreeMap<
42        super::super::super::api::ColumnName,
43        super::super::super::api::Channel,
44    >,
45    #[builder(default, into)]
46    #[serde(
47        rename = "tagKeysFromColumns",
48        skip_serializing_if = "Option::is_none",
49        default
50    )]
51    tag_keys_from_columns: Option<
52        std::collections::BTreeSet<super::super::super::api::TagName>,
53    >,
54    #[builder(default, into)]
55    #[serde(rename = "tagColumns", skip_serializing_if = "Option::is_none", default)]
56    tag_columns: Option<
57        std::collections::BTreeMap<
58            super::super::super::api::TagName,
59            super::super::super::api::ColumnName,
60        >,
61    >,
62    #[builder(default, into)]
63    #[serde(
64        rename = "additionalFileTags",
65        skip_serializing_if = "Option::is_none",
66        default
67    )]
68    additional_file_tags: Option<
69        std::collections::BTreeMap<
70            super::super::super::api::TagName,
71            super::super::super::api::TagValue,
72        >,
73    >,
74    #[builder(default, set(item(type = super::super::super::api::ColumnName)))]
75    #[serde(
76        rename = "excludeColumns",
77        skip_serializing_if = "std::collections::BTreeSet::is_empty",
78        default
79    )]
80    exclude_columns: std::collections::BTreeSet<super::super::super::api::ColumnName>,
81}
82impl CsvOpts {
83    /// Constructs a new instance of the type.
84    #[inline]
85    pub fn new(
86        source: super::IngestSource,
87        target: super::DatasetIngestTarget,
88        timestamp_metadata: super::TimestampMetadata,
89    ) -> Self {
90        Self::builder()
91            .source(source)
92            .target(target)
93            .timestamp_metadata(timestamp_metadata)
94            .build()
95    }
96    #[inline]
97    pub fn source(&self) -> &super::IngestSource {
98        &*self.source
99    }
100    #[inline]
101    pub fn target(&self) -> &super::DatasetIngestTarget {
102        &*self.target
103    }
104    #[inline]
105    pub fn timestamp_metadata(&self) -> &super::TimestampMetadata {
106        &*self.timestamp_metadata
107    }
108    #[inline]
109    pub fn channel_prefix(&self) -> &super::ChannelPrefix {
110        &self.channel_prefix
111    }
112    #[inline]
113    pub fn channel_name_overrides(
114        &self,
115    ) -> &std::collections::BTreeMap<
116        super::super::super::api::ColumnName,
117        super::super::super::api::Channel,
118    > {
119        &self.channel_name_overrides
120    }
121    #[deprecated(note = "Deprecated in favor of tagColumns.")]
122    #[inline]
123    pub fn tag_keys_from_columns(
124        &self,
125    ) -> Option<&std::collections::BTreeSet<super::super::super::api::TagName>> {
126        self.tag_keys_from_columns.as_ref().map(|o| &*o)
127    }
128    /// A map of tag names to column names to derive the tag values from.
129    #[inline]
130    pub fn tag_columns(
131        &self,
132    ) -> Option<
133        &std::collections::BTreeMap<
134            super::super::super::api::TagName,
135            super::super::super::api::ColumnName,
136        >,
137    > {
138        self.tag_columns.as_ref().map(|o| &*o)
139    }
140    /// Specifies a tag set to apply to all data in the file.
141    #[inline]
142    pub fn additional_file_tags(
143        &self,
144    ) -> Option<
145        &std::collections::BTreeMap<
146            super::super::super::api::TagName,
147            super::super::super::api::TagValue,
148        >,
149    > {
150        self.additional_file_tags.as_ref().map(|o| &*o)
151    }
152    /// A set of column names to exclude from ingestion. These columns will not be
153    /// ingested as channels. Useful for excluding columns that contain unsupported
154    /// data types like multidimensional arrays.
155    #[inline]
156    pub fn exclude_columns(
157        &self,
158    ) -> &std::collections::BTreeSet<super::super::super::api::ColumnName> {
159        &self.exclude_columns
160    }
161}