ydb/client_topic/
list_types.rs1use 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}