corevm-host 0.1.28

Types that are common across CoreVM service, builder, monitor, tooling
Documentation
use alloc::collections::VecDeque;
use codec::{Decode, Encode};
use jam_types::{ServiceId, Slot};

/// A message from another service.
///
/// The message is stored in the specified service's storage under key
/// `StorageKey::OutgoingMessage(index)` where `index` is the message sequence number.
///
/// `accumulate` copies this message into the destination storage under
/// `StorageKey::IncomingMessage(src, index)` key.
#[derive(Clone, Copy, Encode, Decode, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ServiceMessage {
	/// Sequence number.
	#[codec(compact)]
	pub index: u64,
	/// Storage service id.
	pub source: ServiceId,
}

/// Outgoing inter-service message.
#[derive(Clone, Encode, Decode, Debug)]
pub struct OutgoingServiceMessage {
	/// Time slot when the message was sent.
	pub slot: Slot,
	pub inner: ServiceMessage,
}

/// Message queue in service storage.
#[derive(Encode, Decode, Debug)]
pub struct MessageQueue<T> {
	/// Next message sequence number.
	#[codec(compact)]
	pub counter: u64,
	/// Messages.
	pub messages: VecDeque<T>,
}

impl<T> Default for MessageQueue<T> {
	fn default() -> Self {
		Self { counter: 0, messages: VecDeque::new() }
	}
}