dimas_com/traits/
capabilities.rs

1// Copyright © 2024 Stephan Kunz
2
3//! Traits for communication capabilities.
4//!
5
6#[doc(hidden)]
7extern crate alloc;
8
9use alloc::string::String;
10use dimas_core::{
11	error::Result,
12	message_types::{Message, QueryableMsg},
13	traits::Capability,
14};
15
16// region:		--- capabilities
17/// `LivelinessSubscriber` capabilities
18pub trait LivelinessSubscriber: Capability + Send + Sync {
19	/// get token
20	fn token(&self) -> &String;
21}
22
23/// `Observer` capabilities
24pub trait Observer: Capability + Send + Sync {
25	/// Get `selector`
26	#[must_use]
27	fn selector(&self) -> &str;
28
29	/// Cancel a running observation
30	/// # Errors
31	fn cancel(&self) -> Result<()>;
32
33	/// Request an observation with an optional [`Message`].
34	/// # Errors
35	fn request(&self, message: Option<Message>) -> Result<()>;
36}
37
38/// `Publisher` capabilities
39pub trait Publisher: Capability + Send + Sync {
40	/// Get `selector`
41	#[must_use]
42	fn selector(&self) -> &str;
43
44	/// Send a "put" message
45	/// # Errors
46	fn put(&self, message: Message) -> Result<()>;
47
48	/// Send a "delete" message
49	/// # Errors
50	fn delete(&self) -> Result<()>;
51}
52
53/// `Querier` capabilities
54pub trait Querier: Capability + Send + Sync {
55	/// Get `selector`
56	#[must_use]
57	fn selector(&self) -> &str;
58
59	/// Run a Querier with an optional [`Message`].
60	/// # Errors
61	fn get(
62		&self,
63		message: Option<Message>,
64		callback: Option<&mut dyn FnMut(QueryableMsg) -> Result<()>>,
65	) -> Result<()>;
66}
67
68/// `Responder` capabilities
69pub trait Responder: Capability + Send + Sync {
70	/// Get `selector`
71	#[must_use]
72	fn selector(&self) -> &str;
73}
74// endregion:	--- capabilities