ydb/client_topic/
list_types.rs

1use crate::grpc_wrapper::raw_topic_service::common::codecs::{RawCodec, RawSupportedCodecs};
2use crate::grpc_wrapper::raw_topic_service::common::consumer::RawConsumer;
3use crate::grpc_wrapper::raw_topic_service::common::metering_mode::RawMeteringMode;
4use derive_builder::Builder;
5use std::collections::HashMap;
6use std::option::Option;
7use std::time::SystemTime;
8
9#[derive(Clone, Default, PartialEq, Eq)]
10pub struct Codec {
11    pub code: i32,
12}
13
14impl Codec {
15    pub const RAW: Codec = Codec { code: 1 };
16    pub const GZIP: Codec = Codec { code: 2 };
17    pub const LZOP: Codec = Codec { code: 3 };
18    pub const ZSTD: Codec = Codec { code: 4 };
19
20    pub fn is_custom(&self) -> bool {
21        self.code >= 10000 && self.code < 20000
22    }
23}
24
25#[derive(Clone, Default)]
26pub struct SupportedCodecs {
27    pub codecs: Vec<Codec>,
28}
29
30impl From<Codec> for RawCodec {
31    fn from(value: Codec) -> Self {
32        Self { code: value.code }
33    }
34}
35
36impl From<SupportedCodecs> for RawSupportedCodecs {
37    fn from(value: SupportedCodecs) -> RawSupportedCodecs {
38        Self {
39            codecs: value
40                .codecs
41                .into_iter()
42                .map(|x| RawCodec { code: x.code })
43                .collect(),
44        }
45    }
46}
47
48#[derive(Clone)]
49pub enum MeteringMode {
50    ReservedCapacity,
51    RequestUnits,
52}
53
54impl From<Option<MeteringMode>> for RawMeteringMode {
55    fn from(value: Option<MeteringMode>) -> Self {
56        match value {
57            None => RawMeteringMode::Unspecified,
58            Some(MeteringMode::RequestUnits) => RawMeteringMode::RequestUnits,
59            Some(MeteringMode::ReservedCapacity) => RawMeteringMode::ReservedCapacity,
60        }
61    }
62}
63
64#[derive(Builder)]
65#[builder(build_fn(error = "crate::errors::YdbError"))]
66#[derive(Clone)]
67pub struct Consumer {
68    pub name: String,
69
70    #[builder(default = "false")]
71    pub important: bool,
72
73    #[builder(default = "None")]
74    pub read_from: Option<SystemTime>,
75
76    #[builder(default = "SupportedCodecs::default()")]
77    pub supported_codecs: SupportedCodecs,
78
79    #[builder(default = "HashMap::new()")]
80    pub attributes: HashMap<String, String>,
81}
82
83impl From<Consumer> for RawConsumer {
84    fn from(consumer: Consumer) -> Self {
85        Self {
86            name: consumer.name,
87            important: consumer.important,
88            read_from: consumer.read_from,
89            supported_codecs: consumer.supported_codecs.into(),
90            attributes: consumer.attributes,
91        }
92    }
93}