aboutsummaryrefslogtreecommitdiff
path: root/src/output_protocol.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/output_protocol.rs')
-rw-r--r--src/output_protocol.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/output_protocol.rs b/src/output_protocol.rs
new file mode 100644
index 0000000..87e2400
--- /dev/null
+++ b/src/output_protocol.rs
@@ -0,0 +1,50 @@
+use std::sync::Arc;
+
+pub mod ipc;
+pub mod stderr;
+pub mod stdout;
+pub mod tcp;
+pub mod udp;
+pub mod udp_broadcast;
+
+pub use ipc::*;
+pub use stderr::*;
+pub use stdout::*;
+pub use tcp::*;
+pub use udp::*;
+pub use udp_broadcast::*;
+
+/// Defines the protocol for an output channel that can be initialized and used to send messages.
+///
+/// Implementors of this trait provide the underlying mechanism for message delivery,
+/// such as writing to stdout, a file, or a network socket.
+///
+/// # Type Parameters
+///
+/// The trait methods return `impl Future<Output = ()> + Send + Sync`, allowing
+/// asynchronous implementations that can be shared across threads.
+pub trait OutputProtocol {
+ /// Initializes the output channel.
+ ///
+ /// This method consumes `self`, indicating it should be called once during setup
+ /// to prepare the output resource (e.g., opening a file, establishing a connection).
+ ///
+ /// # Returns
+ ///
+ /// A future that resolves when initialization is complete.
+ fn init(self) -> impl Future<Output = ()> + Send + Sync;
+
+ /// Sends a message string through the output channel.
+ ///
+ /// This method takes `self: Arc<Self>`, allowing the output channel to be shared
+ /// across multiple concurrent senders (e.g., in multi-threaded or async contexts).
+ ///
+ /// # Arguments
+ ///
+ /// * `str` - The string message to send.
+ ///
+ /// # Returns
+ ///
+ /// A future that resolves when the message has been sent.
+ fn send(self: Arc<Self>, str: &str) -> impl Future<Output = ()> + Send + Sync;
+}