service.rs 1.24 KB
Newer Older
1
2
// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
Ryan Olson's avatar
Ryan Olson committed
3

4
use crate::component::Component;
5
use async_nats::service::{Service as NatsService, ServiceExt};
6

Neelay Shah's avatar
Neelay Shah committed
7
pub const PROJECT_NAME: &str = "Dynamo";
8
const SERVICE_VERSION: &str = env!("CARGO_PKG_VERSION");
9

10
11
/// Minimal NATS service builder to support legacy NATS request plane.
/// This will be removed once all components migrate to TCP request plane.
12
pub async fn build_nats_service(
13
14
15
    nats_client: &crate::transports::nats::Client,
    component: &Component,
    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}");
Ryan Olson's avatar
Ryan Olson committed
19

20
21
22
23
    let description = description.unwrap_or(format!(
        "{PROJECT_NAME} component {} in namespace {}",
        component.name, component.namespace
    ));
24

25
26
27
28
    let nats_service = nats_client
        .client()
        .service_builder()
        .description(description)
29
30
31
        .start(service_name, SERVICE_VERSION.to_string())
        .await
        .map_err(|e| anyhow::anyhow!("Failed to start NATS service: {e}"))?;
32

33
    Ok(nats_service)
Ryan Olson's avatar
Ryan Olson committed
34
}