traits.rs 1.11 KB
Newer Older
1
2
3
// 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
4
5
6
pub mod events;

use super::{DistributedRuntime, Runtime};
7
/// A trait for objects that proivde access to the [Runtime]
Ryan Olson's avatar
Ryan Olson committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pub trait RuntimeProvider {
    fn rt(&self) -> &Runtime;
}

/// A trait for objects that provide access to the [DistributedRuntime].
pub trait DistributedRuntimeProvider {
    fn drt(&self) -> &DistributedRuntime;
}

impl RuntimeProvider for DistributedRuntime {
    fn rt(&self) -> &Runtime {
        &self.runtime
    }
}
22
23
24
25
26
27
28
29
30
31
32

// This implementation is required because:
// 1. MetricsRegistry has a supertrait bound: `MetricsRegistry: Send + Sync + DistributedRuntimeProvider`
// 2. DistributedRuntime implements MetricsRegistry (in distributed.rs)
// 3. Therefore, DistributedRuntime must implement DistributedRuntimeProvider to satisfy the trait bound
// 4. This enables DistributedRuntime to serve as both a provider (of itself) and a metrics registry
impl DistributedRuntimeProvider for DistributedRuntime {
    fn drt(&self) -> &DistributedRuntime {
        self
    }
}