From 73d7bab8844bb21c7a9143c30800c2d11d411e42 Mon Sep 17 00:00:00 2001 From: rtkay123 Date: Sun, 17 Aug 2025 20:02:49 +0200 Subject: feat: typology processor (#8) --- crates/typologies/src/state.rs | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 crates/typologies/src/state.rs (limited to 'crates/typologies/src/state.rs') diff --git a/crates/typologies/src/state.rs b/crates/typologies/src/state.rs new file mode 100644 index 0000000..23e08d9 --- /dev/null +++ b/crates/typologies/src/state.rs @@ -0,0 +1,55 @@ +use std::sync::Arc; + +use async_nats::jetstream::Context; +use moka::future::Cache; +use tokio::sync::RwLock; +use tonic::transport::Endpoint; +use tracing::error; +use warden_core::configuration::typology::{ + TypologyConfiguration, TypologyConfigurationRequest, + query_typologies_client::QueryTypologiesClient, +}; +use warden_stack::{Configuration, cache::RedisManager}; + +use crate::cnfg::LocalConfig; +use warden_middleware::grpc::interceptor::{Intercepted, MyInterceptor}; + +#[derive(Clone)] +pub struct Services { + pub jetstream: Context, + pub cache: RedisManager, +} + +pub type AppHandle = Arc; + +#[derive(Clone)] +pub struct AppState { + pub services: Services, + pub local_cache: Arc>>, + pub config: LocalConfig, + pub query_typology_client: QueryTypologiesClient, +} + +impl AppState { + pub async fn new(services: Services, configuration: Configuration) -> anyhow::Result { + let config: LocalConfig = serde_json::from_value(configuration.misc.clone())?; + let channel = Endpoint::new(config.config_endpoint.to_string())? + .connect() + .await + .inspect_err(|e| { + error!( + endpoint = ?config.config_endpoint, + "could not connect to config service: {e}", + ) + })?; + + let query_typology_client = QueryTypologiesClient::with_interceptor(channel, MyInterceptor); + + Ok(Self { + services, + config, + local_cache: Arc::new(RwLock::new(Cache::builder().build())), + query_typology_client, + }) + } +} -- cgit v1.2.3