summaryrefslogtreecommitdiff
path: root/libs/shared/src
diff options
context:
space:
mode:
authorMatthieuCoder <matthieu@matthieu-dev.xyz>2022-12-31 22:48:40 +0400
committerMatthieuCoder <matthieu@matthieu-dev.xyz>2022-12-31 22:48:40 +0400
commit46fd26962ef55f8b557f7e36d3aee915a819c88c (patch)
tree18038653ee532831aca0000afa7849924c2c63cc /libs/shared/src
parent0fcc68291a5f7526dbeffe33f4a84a649200e847 (diff)
add base of cache component
Diffstat (limited to 'libs/shared/src')
-rw-r--r--libs/shared/src/error.rs5
-rw-r--r--libs/shared/src/lib.rs2
-rw-r--r--libs/shared/src/nats.rs46
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