dimas_com/communicator/
mod.rs

1// Copyright © 2024 Stephan Kunz
2
3//! Enums for communication capabilities
4//!
5
6/// a multi session communicator
7mod multi_communicator;
8/// a single session communicator
9mod single_communicator;
10
11// flatten
12#[allow(clippy::module_name_repetitions)]
13pub use multi_communicator::MultiCommunicator;
14#[allow(clippy::module_name_repetitions)]
15pub use single_communicator::SingleCommunicator;
16
17#[doc(hidden)]
18extern crate alloc;
19
20#[cfg(feature = "std")]
21extern crate std;
22
23// region:      --- factory method
24use crate::traits::Communicator;
25use alloc::sync::Arc;
26use dimas_config::Config;
27use dimas_core::Result;
28
29/// Create a [`Communicator`] from a [`Config`]
30/// # Errors
31pub fn from(config: &Config) -> Result<Arc<dyn Communicator>> {
32	if config.sessions().is_none() {
33		Ok(Arc::new(SingleCommunicator::new(config)?))
34	} else {
35		Ok(Arc::new(MultiCommunicator::new(config)?))
36	}
37}
38// endregion:   --- factory method