glide/config/
standalone.rs1use super::common::{
5 BackoffStrategy, ClientIdentity, NodeAddress, NodeDiscoveryMode, ProtocolVersion,
6 PubSubSubscriptions, ReadFrom, ServerCredentials, TlsConfig, credentials_from_info,
7 duration_as_millis_u32, from_redis_protocol, impl_common_config_builders,
8 split_connection_addr, to_redis_connection_info,
9};
10use glide_core::client::ConnectionRequest;
11use std::time::Duration;
12
13#[derive(Debug, Clone)]
15#[non_exhaustive]
16pub struct GlideClientConfiguration {
17 pub addresses: Vec<NodeAddress>,
19 pub tls: TlsConfig,
21 pub credentials: Option<ServerCredentials>,
23 pub read_from: ReadFrom,
25 pub node_discovery_mode: NodeDiscoveryMode,
27 pub request_timeout: Option<Duration>,
29 pub connection_timeout: Option<Duration>,
31 pub reconnect_strategy: Option<BackoffStrategy>,
33 pub database_id: i64,
35 pub client_name: Option<String>,
37 pub protocol: ProtocolVersion,
39 pub inflight_requests_limit: Option<u32>,
41 pub lazy_connect: bool,
43 pub pubsub_subscriptions: Option<PubSubSubscriptions>,
45 pub force_pubsub_channel: bool,
49 pub root_certs: Vec<Vec<u8>>,
53 pub client_identity: Option<ClientIdentity>,
57}
58
59impl_common_config_builders!(GlideClientConfiguration);
60
61impl GlideClientConfiguration {
62 pub fn new(addresses: Vec<NodeAddress>) -> Self {
64 GlideClientConfiguration {
65 addresses,
66 tls: TlsConfig::NoTls,
67 credentials: None,
68 read_from: ReadFrom::Primary,
69 node_discovery_mode: NodeDiscoveryMode::Standard,
70 request_timeout: None,
71 connection_timeout: None,
72 reconnect_strategy: None,
73 database_id: 0,
74 client_name: None,
75 protocol: ProtocolVersion::default(),
76 inflight_requests_limit: None,
77 lazy_connect: false,
78 pubsub_subscriptions: None,
79 force_pubsub_channel: false,
80 root_certs: Vec::new(),
81 client_identity: None,
82 }
83 }
84
85 pub fn from_url(url: impl AsRef<str>) -> crate::ValkeyResult<Self> {
103 let info = to_redis_connection_info(url)?;
104 let (address, tls) = split_connection_addr(info.addr)?;
105
106 let mut cfg = Self::new(vec![address]).tls(tls);
107 cfg.database_id = info.redis.db;
108 cfg.protocol = from_redis_protocol(info.redis.protocol);
109 cfg.client_name = info.redis.client_name;
110 cfg.credentials = credentials_from_info(info.redis.username, info.redis.password);
111
112 Ok(cfg)
113 }
114
115 pub fn database_id(mut self, db: i64) -> Self {
117 self.database_id = db;
118 self
119 }
120
121 pub fn node_discovery_mode(mut self, mode: NodeDiscoveryMode) -> Self {
123 self.node_discovery_mode = mode;
124 self
125 }
126
127 pub(crate) fn to_request(&self) -> ConnectionRequest {
128 let mut req = self.common_request();
129 req.cluster_mode_enabled = false;
130 req.database_id = self.database_id;
131 req.node_discovery_mode = self.node_discovery_mode.to_core();
132 req
133 }
134}