use super::{Error, RegisterCmd, SpentbookCmd};
use crate::{
messaging::data::CmdResponse,
types::{Chunk, DataAddress},
};
use serde::{Deserialize, Serialize};
use xor_name::XorName;
#[allow(clippy::large_enum_variant)]
#[derive(Eq, PartialEq, Clone, Serialize, Deserialize, Debug)]
pub enum DataCmd {
StoreChunk(Chunk),
Register(RegisterCmd),
Spentbook(SpentbookCmd),
}
impl DataCmd {
pub fn address(&self) -> DataAddress {
match self {
Self::StoreChunk(chunk) => DataAddress::Bytes(*chunk.address()),
Self::Register(register_cmd) => DataAddress::Register(register_cmd.dst_address()),
Self::Spentbook(spentbook_cmd) => DataAddress::Spentbook(spentbook_cmd.dst_address()),
}
}
pub fn dst_name(&self) -> XorName {
use DataCmd::*;
match self {
StoreChunk(c) => *c.name(),
Register(c) => c.name(), Spentbook(c) => c.name(),
}
}
pub fn to_error_response(&self, error: Error) -> CmdResponse {
use DataCmd::*;
match self {
StoreChunk(_) => CmdResponse::StoreChunk(Err(error)),
Register(c) => c.to_error_response(error),
Spentbook(c) => c.to_error_response(error),
}
}
}