use crate::{agent, delegation, module, Result};
#[derive(Clone)]
pub enum InputMessage
{
SendCFP
{
cfp: delegation::CFP,
},
SendProposal
{
proposal: delegation::Proposal,
},
SendProposalAcceptance
{
acceptance: super::transport_messages::Acceptance,
},
SendExecutionAcceptance
{
acceptance: super::transport_messages::Acceptance,
},
SendCancelAcceptance
{
cancel_acceptance: super::transport_messages::CancelAcceptance,
},
}
#[derive(Clone)]
pub enum OutputMessage
{
ReceivedCFP
{
cfp: delegation::CFP,
},
ReceivedProposal
{
proposal: delegation::Proposal,
},
ReceivedProposalAccepted
{
acceptance: super::transport_messages::Acceptance,
},
ReceivedExecutionAccepted
{
acceptance: super::transport_messages::Acceptance,
},
ReceivedCancelAcceptance
{
cancel_acceptance: super::transport_messages::CancelAcceptance,
},
ReceivedStatus
{
status: super::transport_messages::Status,
},
}
pub type ModuleInterface = module::ModuleInterface<InputMessage, OutputMessage>;
pub trait Module:
crate::module::Module<InputMessage = InputMessage, OutputMessage = OutputMessage> + Sized
{
type Options;
fn start<'a>(
agent_data: agent::AgentData,
module_interfaces: (
module::ModuleInterface<InputMessage, OutputMessage>,
Self::ModulePrivateInterface,
),
delegation_module_interface: delegation::ModuleInterface,
options: Self::Options,
) -> Result<futures::future::BoxFuture<'a, ()>>;
}