#![allow(unused_imports)]
#[doc(hidden)]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;
use crate::{
enums::{OperationState, TaskSignal},
error::Result,
message_types::{Message, QueryableMsg},
utils::selector_from,
};
use alloc::{string::String, sync::Arc};
use core::fmt::Debug;
#[cfg(feature = "std")]
use tokio::sync::mpsc::Sender;
use zenoh::Session;
pub type Context<P> = Arc<dyn ContextAbstraction<Props = P>>;
#[allow(clippy::module_name_repetitions)]
pub trait ContextAbstraction: Debug + Send + Sync {
type Props;
#[must_use]
fn name(&self) -> Option<&String>;
#[must_use]
fn fq_name(&self) -> Option<String>;
#[must_use]
fn state(&self) -> OperationState;
fn set_state(&self, state: OperationState) -> Result<()>;
#[must_use]
fn uuid(&self) -> String;
#[must_use]
fn prefix(&self) -> Option<&String>;
#[must_use]
fn mode(&self) -> &String;
#[must_use]
fn default_session(&self) -> Arc<Session>;
#[must_use]
fn session(&self, session_id: &str) -> Option<Arc<Session>>;
#[must_use]
fn sender(&self) -> &Sender<TaskSignal>;
fn read(&self) -> Result<std::sync::RwLockReadGuard<'_, Self::Props>>;
fn write(&self) -> Result<std::sync::RwLockWriteGuard<'_, Self::Props>>;
fn put(&self, topic: &str, message: Message) -> Result<()> {
let selector = selector_from(topic, self.prefix());
self.put_with(&selector, message)
}
fn put_with(&self, selector: &str, message: Message) -> Result<()>;
fn delete(&self, topic: &str) -> Result<()> {
let selector = selector_from(topic, self.prefix());
self.delete_with(&selector)
}
fn delete_with(&self, selector: &str) -> Result<()>;
fn get(
&self,
topic: &str,
message: Option<Message>,
callback: Option<&mut dyn FnMut(QueryableMsg) -> Result<()>>,
) -> Result<()> {
let selector = selector_from(topic, self.prefix());
self.get_with(&selector, message, callback)
}
fn get_with(
&self,
selector: &str,
message: Option<Message>,
callback: Option<&mut dyn FnMut(QueryableMsg) -> Result<()>>,
) -> Result<()>;
fn observe(&self, topic: &str, message: Option<Message>) -> Result<()> {
let selector = selector_from(topic, self.prefix());
self.observe_with(&selector, message)
}
fn observe_with(&self, selector: &str, message: Option<Message>) -> Result<()>;
fn cancel_observe(&self, topic: &str) -> Result<()> {
let selector = selector_from(topic, self.prefix());
self.cancel_observe_with(&selector)
}
fn cancel_observe_with(&self, selector: &str) -> Result<()>;
}