// Copyright 2017-2020 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Polkadot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! Message types for the overseer and subsystems. //! //! These messages are intended to define the protocol by which different subsystems communicate with each //! other and signals that they receive from an overseer to coordinate their work. //! This is intended for use with the `polkadot-overseer` crate. //! //! Subsystems' APIs are defined separately from their implementation, leading to easier mocking. use polkadot_primitives::Hash; /// Signals sent by an overseer to a subsystem. #[derive(PartialEq, Clone, Debug)] pub enum OverseerSignal { /// `Subsystem` should start working on block-based work, given by the relay-chain block hash. StartWork(Hash), /// `Subsystem` should stop working on block-based work specified by the relay-chain block hash. StopWork(Hash), /// Conclude the work of the `Overseer` and all `Subsystem`s. Conclude, } /// A message type used by the Validation Subsystem. #[derive(Debug)] pub enum ValidationSubsystemMessage { ValidityAttestation, } /// A message type used by the CandidateBacking Subsystem. #[derive(Debug)] pub enum CandidateBackingSubsystemMessage { RegisterBackingWatcher, Second, } /// A message type tying together all message types that are used across Subsystems. #[derive(Debug)] pub enum AllMessages { Validation(ValidationSubsystemMessage), CandidateBacking(CandidateBackingSubsystemMessage), } /// A message type that a subsystem receives from an overseer. /// It wraps signals from an overseer and messages that are circulating /// between subsystems. /// /// It is generic over over the message type `M` that a particular `Subsystem` may use. #[derive(Debug)] pub enum FromOverseer { /// Signal from the `Overseer`. Signal(OverseerSignal), /// Some other `Subsystem`'s message. Communication { msg: M, }, }