dynamo_runtime/component/
service.rs1use crate::component::Component;
5use async_nats::service::{Service as NatsService, ServiceExt};
6
7pub const PROJECT_NAME: &str = "Dynamo";
8const SERVICE_VERSION: &str = env!("CARGO_PKG_VERSION");
9
10pub async fn build_nats_service(
13 nats_client: &crate::transports::nats::Client,
14 component: &Component,
15 description: Option<String>,
16) -> anyhow::Result<NatsService> {
17 let service_name = component.service_name();
18 tracing::trace!("component: {component}; creating NATS service, service_name: {service_name}");
19
20 let description = description.unwrap_or(format!(
21 "{PROJECT_NAME} component {} in namespace {}",
22 component.name, component.namespace
23 ));
24
25 let nats_service = nats_client
26 .client()
27 .service_builder()
28 .description(description)
29 .start(service_name, SERVICE_VERSION.to_string())
30 .await
31 .map_err(|e| anyhow::anyhow!("Failed to start NATS service: {e}"))?;
32
33 Ok(nats_service)
34}