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/// Options for running an S3 Select query on one object.
30#[derive(Debug, Clone, PartialEq, Eq)]
31pub struct SelectOptions {
32    /// SQL expression (S3 Select / `s3object`).
33    pub expression: String,
34    pub input_format: SelectInputFormat,
35    pub output_format: SelectOutputFormat,
36    pub compression: SelectCompression,
37}
38
39impl Default for SelectOptions {
40    fn default() -> Self {
41        Self {
42            expression: String::new(),
43            input_format: SelectInputFormat::Csv,
44            output_format: SelectOutputFormat::Csv,
45            compression: SelectCompression::None,
46        }
47    }
48}