dynamo_runtime/component/
service.rs

1// SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2// SPDX-License-Identifier: Apache-2.0
3
4use 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
10/// Minimal NATS service builder to support legacy NATS request plane.
11/// This will be removed once all components migrate to TCP request plane.
12pub 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}