mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 13:57:58 +00:00
refactor+feat: allow subsystems to send only declared messages, generate graphviz (#5314)
Closes #3774 Closes #3826
This commit is contained in:
committed by
GitHub
parent
26340b9054
commit
511891dcce
@@ -20,7 +20,7 @@
|
||||
|
||||
use polkadot_node_subsystem::{
|
||||
messages::AllMessages, overseer, FromOverseer, OverseerSignal, SpawnedSubsystem,
|
||||
SubsystemContext, SubsystemError, SubsystemResult,
|
||||
SubsystemError, SubsystemResult,
|
||||
};
|
||||
use polkadot_node_subsystem_util::TimeoutExt;
|
||||
|
||||
@@ -150,24 +150,25 @@ pub fn sender_receiver() -> (TestSubsystemSender, mpsc::UnboundedReceiver<AllMes
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl<T> overseer::SubsystemSender<T> for TestSubsystemSender
|
||||
impl<OutgoingMessage> overseer::SubsystemSender<OutgoingMessage> for TestSubsystemSender
|
||||
where
|
||||
T: Into<AllMessages> + Send + 'static,
|
||||
AllMessages: From<OutgoingMessage>,
|
||||
OutgoingMessage: Send + 'static,
|
||||
{
|
||||
async fn send_message(&mut self, msg: T) {
|
||||
async fn send_message(&mut self, msg: OutgoingMessage) {
|
||||
self.tx.send(msg.into()).await.expect("test overseer no longer live");
|
||||
}
|
||||
|
||||
async fn send_messages<X>(&mut self, msgs: X)
|
||||
async fn send_messages<I>(&mut self, msgs: I)
|
||||
where
|
||||
X: IntoIterator<Item = T> + Send,
|
||||
X::IntoIter: Send,
|
||||
I: IntoIterator<Item = OutgoingMessage> + Send,
|
||||
I::IntoIter: Send,
|
||||
{
|
||||
let mut iter = stream::iter(msgs.into_iter().map(|msg| Ok(msg.into())));
|
||||
self.tx.send_all(&mut iter).await.expect("test overseer no longer live");
|
||||
}
|
||||
|
||||
fn send_unbounded_message(&mut self, msg: T) {
|
||||
fn send_unbounded_message(&mut self, msg: OutgoingMessage) {
|
||||
self.tx.unbounded_send(msg.into()).expect("test overseer no longer live");
|
||||
}
|
||||
}
|
||||
@@ -180,16 +181,17 @@ pub struct TestSubsystemContext<M, S> {
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl<M, S> overseer::SubsystemContext for TestSubsystemContext<M, S>
|
||||
impl<M, Spawner> overseer::SubsystemContext for TestSubsystemContext<M, Spawner>
|
||||
where
|
||||
M: std::fmt::Debug + Send + 'static,
|
||||
M: overseer::AssociateOutgoing + std::fmt::Debug + Send + 'static,
|
||||
AllMessages: From<<M as overseer::AssociateOutgoing>::OutgoingMessages>,
|
||||
AllMessages: From<M>,
|
||||
S: SpawnNamed + Send + 'static,
|
||||
Spawner: SpawnNamed + Send + 'static,
|
||||
{
|
||||
type Message = M;
|
||||
type Sender = TestSubsystemSender;
|
||||
type Signal = OverseerSignal;
|
||||
type AllMessages = AllMessages;
|
||||
type OutgoingMessages = <M as overseer::AssociateOutgoing>::OutgoingMessages;
|
||||
type Error = SubsystemError;
|
||||
|
||||
async fn try_recv(&mut self) -> Result<Option<FromOverseer<M>>, ()> {
|
||||
@@ -316,8 +318,13 @@ pub struct ForwardSubsystem<M>(pub mpsc::Sender<M>);
|
||||
|
||||
impl<M, Context> overseer::Subsystem<Context, SubsystemError> for ForwardSubsystem<M>
|
||||
where
|
||||
M: std::fmt::Debug + Send + 'static,
|
||||
Context: SubsystemContext<Message = M> + overseer::SubsystemContext<Message = M>,
|
||||
M: overseer::AssociateOutgoing + std::fmt::Debug + Send + 'static,
|
||||
Context: overseer::SubsystemContext<
|
||||
Message = M,
|
||||
Signal = OverseerSignal,
|
||||
Error = SubsystemError,
|
||||
OutgoingMessages = <M as overseer::AssociateOutgoing>::OutgoingMessages,
|
||||
>,
|
||||
{
|
||||
fn start(mut self, mut ctx: Context) -> SpawnedSubsystem {
|
||||
let future = Box::pin(async move {
|
||||
|
||||
Reference in New Issue
Block a user