Skip to main content

rc_core/
select.rs

1//! S3 Select domain types (no AWS SDK types).
2
3/// Object payload format for S3 Select input.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum SelectInputFormat {
6    #[default]
7    Csv,
8    Json,
9    Parquet,
10}
11
12/// Result row format for S3 Select output.
13#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
14pub enum SelectOutputFormat {
15    #[default]
16    Csv,
17    Json,
18}
19
20/// Compression applied to the **stored object** (input decompression).
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
22pub enum SelectCompression {
23    #[default]
24    None,
25    Gzip,
26    Bzip2,
27}
28
29/// CSV header handling for S3 Select input.
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
31pub enum SelectCsvFileHeaderInfo {
32    #[default]
33    None,
34    Ignore,
35    Use,
36}
37
38/// JSON input shape for S3 Select.
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
40pub enum SelectJsonInputType {
41    #[default]
42    Lines,
43    Document,
44}
45
46/// CSV output quote behavior.
47#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
48pub enum SelectQuoteFields {
49    Always,
50    #[default]
51    AsNeeded,
52}
53
54/// Supported CSV input serialization options.
55#[derive(Debug, Clone, PartialEq, Eq, Default)]
56pub struct SelectCsvInputOptions {
57    pub file_header_info: SelectCsvFileHeaderInfo,
58    pub field_delimiter: Option<String>,
59    pub quote_character: Option<String>,
60    pub quote_escape_character: Option<String>,
61    pub comments: Option<String>,
62}
63
64/// Supported CSV output serialization options.
65#[derive(Debug, Clone, PartialEq, Eq, Default)]
66pub struct SelectCsvOutputOptions {
67    pub field_delimiter: Option<String>,
68    pub record_delimiter: Option<String>,
69    pub quote_character: Option<String>,
70    pub quote_escape_character: Option<String>,
71    pub quote_fields: SelectQuoteFields,
72}
73
74/// Supported JSON input serialization options.
75#[derive(Debug, Clone, PartialEq, Eq, Default)]
76pub struct SelectJsonInputOptions {
77    pub input_type: SelectJsonInputType,
78}
79
80/// Supported JSON output serialization options.
81#[derive(Debug, Clone, PartialEq, Eq, Default)]
82pub struct SelectJsonOutputOptions {
83    pub record_delimiter: Option<String>,
84}
85
86/// ScanRange request body parameters.
87#[derive(Debug, Clone, PartialEq, Eq, Default)]
88pub struct SelectScanRangeOptions {
89    pub start: Option<i64>,
90    pub end: Option<i64>,
91}
92
93/// SSE-C parameters for encrypted objects.
94#[derive(Debug, Clone, PartialEq, Eq, Default)]
95pub struct SelectSseCustomerOptions {
96    pub algorithm: Option<String>,
97    pub key: Option<String>,
98    pub key_md5: Option<String>,
99}
100
101/// Options for running an S3 Select query on one object.
102#[derive(Debug, Clone, PartialEq, Eq)]
103pub struct SelectOptions {
104    /// SQL expression (S3 Select / `s3object`).
105    pub expression: String,
106    pub input_format: SelectInputFormat,
107    pub output_format: SelectOutputFormat,
108    pub compression: SelectCompression,
109    pub csv_input: SelectCsvInputOptions,
110    pub csv_output: SelectCsvOutputOptions,
111    pub json_input: SelectJsonInputOptions,
112    pub json_output: SelectJsonOutputOptions,
113    pub scan_range: SelectScanRangeOptions,
114    pub sse_customer: SelectSseCustomerOptions,
115}
116
117impl Default for SelectOptions {
118    fn default() -> Self {
119        Self {
120            expression: String::new(),
121            input_format: SelectInputFormat::Csv,
122            output_format: SelectOutputFormat::Csv,
123            compression: SelectCompression::None,
124            csv_input: SelectCsvInputOptions::default(),
125            csv_output: SelectCsvOutputOptions::default(),
126            json_input: SelectJsonInputOptions::default(),
127            json_output: SelectJsonOutputOptions::default(),
128            scan_range: SelectScanRangeOptions::default(),
129            sse_customer: SelectSseCustomerOptions::default(),
130        }
131    }
132}