diff options
| author | MatthieuCoder <matthieu@matthieu-dev.xyz> | 2022-12-31 22:48:40 +0400 |
|---|---|---|
| committer | MatthieuCoder <matthieu@matthieu-dev.xyz> | 2022-12-31 22:48:40 +0400 |
| commit | 46fd26962ef55f8b557f7e36d3aee915a819c88c (patch) | |
| tree | 18038653ee532831aca0000afa7849924c2c63cc /libs/shared/src | |
| parent | 0fcc68291a5f7526dbeffe33f4a84a649200e847 (diff) | |
add base of cache component
Diffstat (limited to 'libs/shared/src')
| -rw-r--r-- | libs/shared/src/error.rs | 5 | ||||
| -rw-r--r-- | libs/shared/src/lib.rs | 2 | ||||
| -rw-r--r-- | libs/shared/src/nats.rs | 46 |
3 files changed, 13 insertions, 40 deletions
diff --git a/libs/shared/src/error.rs b/libs/shared/src/error.rs index 0899579..31b1dcd 100644 --- a/libs/shared/src/error.rs +++ b/libs/shared/src/error.rs @@ -1,5 +1,5 @@ use config::ConfigError; -use std::fmt::Debug; +use std::{fmt::Debug, io}; use thiserror::Error; #[derive(Debug, Error)] @@ -12,4 +12,7 @@ pub enum GenericError { #[error("step `{0}` failed")] StepFailed(String), + + #[error("io error")] + Io(#[from] io::Error) } diff --git a/libs/shared/src/lib.rs b/libs/shared/src/lib.rs index 58df5e1..62d8689 100644 --- a/libs/shared/src/lib.rs +++ b/libs/shared/src/lib.rs @@ -1,5 +1,5 @@ pub use ::config as config_crate; -pub use ::nats as nats_crate; +pub use ::async_nats as nats_crate; pub use ::redis as redis_crate; pub use log; pub use prometheus; diff --git a/libs/shared/src/nats.rs b/libs/shared/src/nats.rs index 0616398..05953cc 100644 --- a/libs/shared/src/nats.rs +++ b/libs/shared/src/nats.rs @@ -1,5 +1,8 @@ -use nats::{Connection, Options}; +use async_nats::Client; use serde::Deserialize; +use std::future::Future; + +use crate::error::GenericError; #[derive(Clone, Debug, Deserialize)] pub struct NatsConfigurationClientCert { @@ -14,46 +17,13 @@ pub struct NatsConfigurationTls { #[derive(Clone, Debug, Deserialize)] pub struct NatsConfiguration { - pub client_cert: Option<NatsConfigurationClientCert>, - pub root_cert: Option<Vec<String>>, - pub jetstream_api_prefix: Option<String>, - pub max_reconnects: Option<usize>, - pub reconnect_buffer_size: Option<usize>, - pub tls: Option<NatsConfigurationTls>, - pub client_name: Option<String>, - pub tls_required: Option<bool>, pub host: String, } // todo: Prefer From since it automatically gives a free Into implementation // Allows the configuration to directly create a nats connection -impl Into<Connection> for NatsConfiguration { - fn into(self) -> Connection { - let mut options = Options::new(); - - if let Some(client_cert) = self.client_cert { - options = options.client_cert(client_cert.cert, client_cert.key); - } - - if let Some(root_certs) = self.root_cert { - for root_cert in root_certs { - options = options.add_root_certificate(root_cert); - } - } - - options = options.max_reconnects(self.max_reconnects); - options = options.no_echo(); - options = options.reconnect_buffer_size(self.reconnect_buffer_size.unwrap_or(64 * 1024)); - options = options.tls_required(self.tls_required.unwrap_or(false)); - options = options.with_name(&self.client_name.unwrap_or_else(|| "Nova".to_string())); - - if let Some(tls) = self.tls { - let mut config = nats::rustls::ClientConfig::new(); - config.set_mtu(&tls.mtu); - // todo: more options? - options = options.tls_client_config(config); - } - - options.connect(&self.host).unwrap() +impl NatsConfiguration { + pub async fn to_client(self) -> Result<Client, GenericError> { + Ok(async_nats::connect(self.host).await?) } -} +}
\ No newline at end of file |
