Skip to main content

corevm_host/
messages.rs

1use alloc::collections::VecDeque;
2use codec::{Decode, Encode};
3use jam_types::{ServiceId, Slot};
4
5/// A message from another service.
6///
7/// The message is stored in the specified service's storage under key
8/// `StorageKey::OutgoingMessage(index)` where `index` is the message sequence number.
9///
10/// `accumulate` copies this message into the destination storage under
11/// `StorageKey::IncomingMessage(src, index)` key.
12#[derive(Clone, Copy, Encode, Decode, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
13pub struct ServiceMessage {
14	/// Sequence number.
15	#[codec(compact)]
16	pub index: u64,
17	/// Storage service id.
18	pub source: ServiceId,
19}
20
21/// Outgoing inter-service message.
22#[derive(Clone, Encode, Decode, Debug)]
23pub struct OutgoingServiceMessage {
24	/// Time slot when the message was sent.
25	pub slot: Slot,
26	pub inner: ServiceMessage,
27}
28
29/// Message queue in service storage.
30#[derive(Encode, Decode, Debug)]
31pub struct MessageQueue<T> {
32	/// Next message sequence number.
33	#[codec(compact)]
34	pub counter: u64,
35	/// Messages.
36	pub messages: VecDeque<T>,
37}
38
39impl<T> Default for MessageQueue<T> {
40	fn default() -> Self {
41		Self { counter: 0, messages: VecDeque::new() }
42	}
43}