use gear_core::{env::MessageWaitedType, ids::MessageId};
use sp_runtime::{
codec::{self, Decode, Encode},
scale_info::{self, TypeInfo},
};
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum MessageEntry {
Init,
Handle,
Reply(MessageId),
Signal,
}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum DispatchStatus {
Success,
Failed,
NotExecuted,
}
pub trait RuntimeReason: Sized {
fn into_reason<S: SystemReason>(self) -> Reason<Self, S> {
Reason::Runtime(self)
}
}
impl RuntimeReason for () {}
pub trait SystemReason: Sized {
fn into_reason<R: RuntimeReason>(self) -> Reason<R, Self> {
Reason::System(self)
}
}
impl SystemReason for () {}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum Reason<R: RuntimeReason, S: SystemReason> {
Runtime(R),
System(S),
}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo, RuntimeReason)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum MessageWaitedRuntimeReason {
WaitCalled,
WaitForCalled,
WaitUpToCalled,
WaitUpToCalledFull,
}
impl From<MessageWaitedType> for MessageWaitedRuntimeReason {
fn from(src: MessageWaitedType) -> Self {
match src {
MessageWaitedType::Wait => MessageWaitedRuntimeReason::WaitCalled,
MessageWaitedType::WaitFor => MessageWaitedRuntimeReason::WaitForCalled,
MessageWaitedType::WaitUpTo => MessageWaitedRuntimeReason::WaitUpToCalled,
MessageWaitedType::WaitUpToFull => MessageWaitedRuntimeReason::WaitUpToCalledFull,
}
}
}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo, SystemReason)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum MessageWaitedSystemReason {}
pub type MessageWaitedReason = Reason<MessageWaitedRuntimeReason, MessageWaitedSystemReason>;
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo, RuntimeReason)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum MessageWokenRuntimeReason {
WakeCalled,
}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo, SystemReason)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum MessageWokenSystemReason {
ProgramGotInitialized,
TimeoutHasCome,
OutOfRent,
}
pub type MessageWokenReason = Reason<MessageWokenRuntimeReason, MessageWokenSystemReason>;
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum CodeChangeKind<BlockNumber> {
Active { expiration: Option<BlockNumber> },
Inactive,
Reinstrumented,
}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo, RuntimeReason)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum UserMessageReadRuntimeReason {
MessageReplied,
MessageClaimed,
}
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo, SystemReason)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum UserMessageReadSystemReason {
OutOfRent,
}
pub type UserMessageReadReason = Reason<UserMessageReadRuntimeReason, UserMessageReadSystemReason>;
#[derive(Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
#[codec(crate = codec)]
#[scale_info(crate = scale_info)]
pub enum ProgramChangeKind<BlockNumber> {
Active { expiration: BlockNumber },
Inactive,
Paused,
Terminated,
ExpirationChanged { expiration: BlockNumber },
ProgramSet { expiration: BlockNumber },
}