ComHub

Struct ComHub 

Source
pub struct ComHub {
    pub endpoint: Endpoint,
    pub options: ComHubOptions,
    pub interface_factories: RefCell<HashMap<String, ComInterfaceFactoryFn>>,
    pub interfaces: RefCell<HashMap<ComInterfaceUUID, (Rc<RefCell<dyn ComInterface>>, InterfacePriority)>>,
    pub sockets: RefCell<HashMap<ComInterfaceSocketUUID, (Arc<Mutex<ComInterfaceSocket>>, HashSet<Endpoint>)>>,
    pub endpoint_sockets_blacklist: RefCell<HashMap<Endpoint, HashSet<ComInterfaceSocketUUID>>>,
    pub fallback_sockets: RefCell<Vec<(ComInterfaceSocketUUID, u16, InterfaceDirection)>>,
    pub endpoint_sockets: RefCell<HashMap<Endpoint, Vec<(ComInterfaceSocketUUID, DynamicEndpointProperties)>>>,
    pub block_handler: BlockHandler,
    /* private fields */
}

Fields§

§endpoint: Endpoint

the runtime endpoint of the hub (@me)

§options: ComHubOptions

ComHub configuration options

§interface_factories: RefCell<HashMap<String, ComInterfaceFactoryFn>>

a list of all available interface factories, keyed by their interface type

§interfaces: RefCell<HashMap<ComInterfaceUUID, (Rc<RefCell<dyn ComInterface>>, InterfacePriority)>>

a list of all available interfaces, keyed by their UUID

§sockets: RefCell<HashMap<ComInterfaceSocketUUID, (Arc<Mutex<ComInterfaceSocket>>, HashSet<Endpoint>)>>

a list of all available sockets, keyed by their UUID contains the socket itself and a list of endpoints currently associated with it

§endpoint_sockets_blacklist: RefCell<HashMap<Endpoint, HashSet<ComInterfaceSocketUUID>>>

a blacklist of sockets that are not allowed to be used for a specific endpoint

§fallback_sockets: RefCell<Vec<(ComInterfaceSocketUUID, u16, InterfaceDirection)>>

fallback sockets that are used if no direct endpoint reachable socket is available sorted by priority

§endpoint_sockets: RefCell<HashMap<Endpoint, Vec<(ComInterfaceSocketUUID, DynamicEndpointProperties)>>>

a list of all available sockets for each endpoint, with additional DynamicEndpointProperties metadata

§block_handler: BlockHandler

Implementations§

Source§

impl ComHub

Source

pub fn new(endpoint: impl Into<Endpoint>) -> ComHub

Source

pub async fn init(&self) -> Result<(), ComHubError>

Source

pub fn register_interface_factory( &self, interface_type: String, factory: ComInterfaceFactoryFn, )

Registers a new interface factory for a specific interface implementation. This allows the ComHub to create new instances of the interface on demand.

Source

pub async fn create_interface( &self, interface_type: &str, setup_data: ValueContainer, priority: InterfacePriority, ) -> Result<Rc<RefCell<dyn ComInterface>>, ComHubError>

Creates a new interface instance using the registered factory for the specified interface type if it exists. The interface is opened and added to the ComHub.

Source

pub fn get_interface_by_uuid<T: ComInterface>( &self, interface_uuid: &ComInterfaceUUID, ) -> Option<Rc<RefCell<T>>>

Source

pub fn has_interface(&self, interface_uuid: &ComInterfaceUUID) -> bool

Source

pub fn get_dyn_interface_by_uuid( &self, uuid: &ComInterfaceUUID, ) -> Option<Rc<RefCell<dyn ComInterface>>>

Source

pub async fn open_and_add_interface( &self, interface: Rc<RefCell<dyn ComInterface>>, priority: InterfacePriority, ) -> Result<(), ComHubError>

Source

pub fn add_interface( &self, interface: Rc<RefCell<dyn ComInterface>>, priority: InterfacePriority, ) -> Result<(), ComHubError>

Source

pub async fn remove_interface( &self, interface_uuid: ComInterfaceUUID, ) -> Result<(), ComHubError>

User can proactively remove an interface from the hub. This will destroy the interface and it’s sockets (perform deep cleanup)

Source

pub fn register_socket_endpoint( &self, socket: Arc<Mutex<ComInterfaceSocket>>, endpoint: Endpoint, distance: i8, ) -> Result<(), SocketEndpointRegistrationError>

Registers a new endpoint that is reachable over the socket if the socket is not already registered, it will be added to the socket list. If the provided endpoint is not the same as the socket endpoint, it is registered as an indirect socket to the endpoint

Source

pub async fn wait_for_update_async(&self)

Waits for all background tasks scheduled by the update() function to finish This includes block flushes from flush_outgoing_blocks() and interface (re)-connections from update_interfaces()

Source

pub async fn update_async(&self)

Updates all sockets and interfaces, collecting incoming data and sending out queued blocks. In contrast to the update() function, this function is asynchronous and will wait for all background tasks scheduled by the update() function to finish

Source

pub fn _start_update_loop(self_rc: Rc<Self>)

Runs the update loop for the ComHub. This method will continuously handle incoming data, send out queued blocks and update the sockets. This is only used for internal tests - in a full runtime setup, the main runtime update loop triggers ComHub updates.

Source

pub fn update(&self)

Update all sockets and interfaces, collecting incoming data and sending out queued blocks. Updates are scheduled in local tasks and are not immediately visible. To wait for the block update to finish, use wait_for_update_async().

Source

pub fn send_own_block(&self, block: DXBBlock) -> Result<(), Vec<Endpoint>>

Public method to send an outgoing block from this endpoint. Called by the runtime.

Source

pub async fn send_own_block_await_response( &self, block: DXBBlock, options: ResponseOptions, ) -> Vec<Result<Response, ResponseError>>

Sends a block and wait for a response block. Fix number of exact endpoints -> Expected responses are known at send time. TODO #189: make sure that mutating blocks are always send to specific endpoint instances (@jonas/0001), not generic endpoints like @jonas. @jonas -> response comes from a specific instance of @jonas/0001

Source

pub fn send_block( &self, block: DXBBlock, exclude_sockets: Vec<ComInterfaceSocketUUID>, forked: bool, ) -> Result<(), Vec<Endpoint>>

Sends a block to all endpoints specified in the block header. The routing algorithm decides which sockets are used to send the block, based on the endpoint. A block can be sent to multiple endpoints at the same time over a socket or to multiple sockets for each endpoint. The original_socket parameter is used to prevent sending the block back to the sender. When this method is called, the block is queued in the send queue. Returns an Err with a list of unreachable endpoints if the block could not be sent to all endpoints.

Source§

impl ComHub

Source

pub async fn record_trace( &self, endpoint: impl Into<Endpoint>, ) -> Option<NetworkTraceResult>

Source

pub async fn record_trace_with_options( &self, options: TraceOptions, ) -> Option<NetworkTraceResult>

Source

pub async fn record_trace_multiple( &self, endpoints: Vec<impl Into<Endpoint>>, ) -> Vec<NetworkTraceResult>

Source

pub async fn record_trace_multiple_with_options( &self, options: TraceOptions, ) -> Vec<NetworkTraceResult>

Trait Implementations§

Source§

impl Debug for ComHub

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ComHub

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl !Freeze for ComHub

§

impl !RefUnwindSafe for ComHub

§

impl !Send for ComHub

§

impl !Sync for ComHub

§

impl Unpin for ComHub

§

impl !UnwindSafe for ComHub

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Any for T
where T: Any,

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<'src, T> IntoMaybe<'src, T> for T
where T: 'src,

Source§

type Proj<U: 'src> = U

Source§

fn map_maybe<R>( self, _f: impl FnOnce(&'src T) -> &'src R, g: impl FnOnce(T) -> R, ) -> <T as IntoMaybe<'src, T>>::Proj<R>
where R: 'src,

Source§

impl<T> Paint for T
where T: ?Sized,

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,