use crate::define_enum;
mod admin;
mod keeper;
mod public;
mod user;
mod vault;
pub use self::admin::*;
pub use self::keeper::*;
pub use self::public::*;
pub use self::user::*;
pub use self::vault::*;
define_enum! {
enum CallMessage<Address> {
User(UserAction<Address>) = 0,
Vault(VaultAction<Address>) = 1,
Keeper(KeeperAction<Address>) = 2,
Public(PublicAction<Address>) = 3,
Admin(AdminAction<Address>) = 4,
}
}
impl<Address> CallMessage<Address> {
pub fn msg_type(&self) -> String {
match self {
Self::User(x) => format!("User/{}", x.as_ref()),
Self::Vault(x) => format!("Vault/{}", x.as_ref()),
Self::Keeper(x) => format!("Keeper/{}", x.as_ref()),
Self::Public(x) => format!("Public/{}", x.as_ref()),
Self::Admin(x) => format!("Admin/{}", x.as_ref()),
}
}
}
impl<Address> From<UserAction<Address>> for CallMessage<Address> {
fn from(v: UserAction<Address>) -> Self {
Self::User(v)
}
}
impl<Address> From<VaultAction<Address>> for CallMessage<Address> {
fn from(v: VaultAction<Address>) -> Self {
Self::Vault(v)
}
}
impl<Address> From<KeeperAction<Address>> for CallMessage<Address> {
fn from(v: KeeperAction<Address>) -> Self {
Self::Keeper(v)
}
}
impl<Address> From<PublicAction<Address>> for CallMessage<Address> {
fn from(v: PublicAction<Address>) -> Self {
Self::Public(v)
}
}
impl<Address> From<AdminAction<Address>> for CallMessage<Address> {
fn from(v: AdminAction<Address>) -> Self {
Self::Admin(v)
}
}
#[test]
fn test_msg_type() {
assert_eq!(
"User/CreateSubAccount",
CallMessage::<crate::address::Address>::User(UserAction::CreateSubAccount { index: 0 })
.msg_type()
);
}