blob: 2bf2b69fd804b4f804e7c20caaeae0c78d12e751 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use fuchsia_zircon as zx;
pub(self) mod beacon;
/// Common message-related definitions.
pub mod action_fuse;
pub mod base;
pub mod delegate;
pub mod message_builder;
pub mod message_client;
pub mod message_hub;
pub mod messenger;
pub mod receptor;
/// Representation of time used for logging.
pub type Timestamp = zx::Time;
pub trait MessageHubDefinition {
type Payload: base::Payload + 'static;
type Address: base::Address + 'static;
type Role: base::Role + 'static;
}
pub trait MessageHubUtil {
type Delegate;
type Audience;
type Messenger;
type TargetedMessenger;
type MessageError;
type MessageEvent;
type MessageClient;
type MessengerType;
type MessageType;
type Receptor;
type Signature;
fn create_hub() -> Self::Delegate;
}
impl<T> MessageHubUtil for T
where
T: MessageHubDefinition,
{
type Delegate = delegate::Delegate<T::Payload, T::Address, T::Role>;
type Audience = base::Audience<T::Address, T::Role>;
type Messenger = messenger::MessengerClient<T::Payload, T::Address, T::Role>;
type TargetedMessenger = messenger::TargetedMessengerClient<T::Payload, T::Address, T::Role>;
type MessageError = base::MessageError<T::Address>;
type MessageEvent = base::MessageEvent<T::Payload, T::Address, T::Role>;
type MessageClient = message_client::MessageClient<T::Payload, T::Address, T::Role>;
type MessengerType = base::MessengerType<T::Payload, T::Address, T::Role>;
type MessageType = base::MessageType<T::Payload, T::Address, T::Role>;
type Receptor = receptor::Receptor<T::Payload, T::Address, T::Role>;
type Signature = base::Signature<T::Address>;
fn create_hub() -> Self::Delegate {
message_hub::MessageHub::<T::Payload, T::Address, T::Role>::create(None)
}
}