"docs/backends/trtllm/README.md" did not exist on "03360b84756931e13113656711817094fb97799e"
events.rs 2.73 KB
Newer Older
Ryan Olson's avatar
Ryan Olson committed
1
2
3
4
5
// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

use std::fmt::Debug;

6
7
8
use anyhow::Result;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
Ryan Olson's avatar
Ryan Olson committed
9
10
11
12
13
14

// #[async_trait]
// pub trait Publisher: Debug + Clone + Send + Sync {
//     async fn publish(&self, event: &(impl Serialize + Send + Sync)) -> Result<()>;
// }

15
/// An [EventPublisher] is an object that can publish events.
Ryan Olson's avatar
Ryan Olson committed
16
///
17
/// Each implementation of [EventPublisher] will define the root subject.
Ryan Olson's avatar
Ryan Olson committed
18
19
#[async_trait]
pub trait EventPublisher {
20
    /// The base subject used for this implementation of the [EventPublisher].
Ryan Olson's avatar
Ryan Olson committed
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    fn subject(&self) -> String;

    /// Publish a single event to the event plane. The `event_name` will be `.` concatenated with the
    /// base subject provided by the implementation.
    async fn publish(
        &self,
        event_name: impl AsRef<str> + Send + Sync,
        event: &(impl Serialize + Send + Sync),
    ) -> Result<()>;

    /// Publish a single event as bytes to the event plane. The `event_name` will be `.` concatenated with the
    /// base subject provided by the implementation.
    async fn publish_bytes(
        &self,
        event_name: impl AsRef<str> + Send + Sync,
        bytes: Vec<u8>,
    ) -> Result<()>;

    // /// Create a new publisher for the given event name. The `event_name` will be `.` concatenated with the
    // /// base subject provided by the implementation.
    // fn publisher(&self, event_name: impl AsRef<str>) -> impl Publisher;

    // /// Create a new publisher for the given event name. The `event_name` will be `.` concatenated with the
    // fn publisher(&self, event_name: impl AsRef<str>) -> Result<Publisher>;
    // fn publisher_bytes(&self, event_name: impl AsRef<str>) -> &PublisherBytes;
}
47

48
/// An [EventSubscriber] is an object that can subscribe to events.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
///
/// This trait provides methods to subscribe to events published on specific subjects.
#[async_trait]
pub trait EventSubscriber {
    /// Subscribe to events with the given event name.
    /// The `event_name` will be `.` concatenated with the base subject provided by the implementation.
    /// Returns a subscriber that can be used to receive events.
    async fn subscribe(
        &self,
        event_name: impl AsRef<str> + Send + Sync,
    ) -> Result<async_nats::Subscriber>;

    /// Subscribe to events with the given event name and deserialize them to the specified type.
    /// This is a convenience method that combines subscribe and deserialization.
    async fn subscribe_with_type<T: for<'de> Deserialize<'de> + Send + 'static>(
        &self,
        event_name: impl AsRef<str> + Send + Sync,
    ) -> Result<impl futures::Stream<Item = Result<T>> + Send>;
}