mod client_req;
mod coins;
mod idata;
mod login_packet;
mod mdata;
mod sdata;
pub use self::login_packet::{LoginPacket, LoginPacketRequest, MAX_LOGIN_PACKET_BYTES};
use crate::{Error, Response, XorName};
pub use client_req::ClientRequest;
pub use coins::CoinsRequest;
pub use idata::IDataRequest;
pub use mdata::MDataRequest;
pub use sdata::SDataRequest;
use serde::{Deserialize, Serialize};
use std::{borrow::Cow, fmt};
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, Debug)]
pub enum Type {
PublicGet,
PrivateGet,
Mutation,
Transaction,
}
pub enum AuthorisationKind {
GetPub,
GetPriv,
GetBalance,
Mutation,
ManageAppKeys,
TransferCoins,
MutAndTransferCoins,
}
#[allow(clippy::large_enum_variant)]
#[derive(Hash, Eq, PartialEq, PartialOrd, Clone, Serialize, Deserialize)]
pub enum Request {
IData(IDataRequest),
MData(MDataRequest),
SData(SDataRequest),
Coins(CoinsRequest),
LoginPacket(LoginPacketRequest),
Client(ClientRequest),
}
impl Request {
pub fn get_type(&self) -> Type {
use Request::*;
match self {
IData(req) => req.get_type(),
MData(req) => req.get_type(),
SData(req) => req.get_type(),
Coins(req) => req.get_type(),
LoginPacket(req) => req.get_type(),
Client(req) => req.get_type(),
}
}
pub fn error_response(&self, error: Error) -> Response {
use Request::*;
match self {
IData(req) => req.error_response(error),
MData(req) => req.error_response(error),
SData(req) => req.error_response(error),
Coins(req) => req.error_response(error),
LoginPacket(req) => req.error_response(error),
Client(req) => req.error_response(error),
}
}
pub fn authorisation_kind(&self) -> AuthorisationKind {
use Request::*;
match self {
IData(req) => req.authorisation_kind(),
MData(req) => req.authorisation_kind(),
SData(req) => req.authorisation_kind(),
Coins(req) => req.authorisation_kind(),
LoginPacket(req) => req.authorisation_kind(),
Client(req) => req.authorisation_kind(),
}
}
pub fn dest_address(&self) -> Option<Cow<XorName>> {
use Request::*;
match self {
IData(req) => req.dest_address(),
MData(req) => req.dest_address(),
SData(req) => req.dest_address(),
Coins(req) => req.dest_address(),
LoginPacket(req) => req.dest_address(),
Client(req) => req.dest_address(),
}
}
}
impl fmt::Debug for Request {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
use Request::*;
match self {
IData(req) => write!(formatter, "{:?}", req),
MData(req) => write!(formatter, "{:?}", req),
SData(req) => write!(formatter, "{:?}", req),
Coins(req) => write!(formatter, "{:?}", req),
LoginPacket(req) => write!(formatter, "{:?}", req),
Client(req) => write!(formatter, "{:?}", req),
}
}
}