use super::{CmdError, Error, QueryResponse};
use serde::{Deserialize, Serialize};
use sn_data_types::{Blob, BlobAddress, PublicKey};
use xor_name::XorName;
#[derive(Hash, Eq, PartialEq, PartialOrd, Clone, Serialize, Deserialize, Debug)]
pub enum BlobRead {
Get(BlobAddress),
}
#[allow(clippy::large_enum_variant)]
#[derive(Hash, Eq, PartialEq, PartialOrd, Clone, Serialize, Deserialize, Debug)]
pub enum BlobWrite {
New(Blob),
DeletePrivate(BlobAddress),
}
impl BlobRead {
pub fn error(&self, error: Error) -> QueryResponse {
QueryResponse::GetBlob(Err(error))
}
pub fn dst_address(&self) -> XorName {
use BlobRead::*;
match self {
Get(address) => *address.name(),
}
}
}
impl BlobWrite {
pub fn error(&self, error: Error) -> CmdError {
CmdError::Data(error)
}
pub fn dst_address(&self) -> XorName {
use BlobWrite::*;
match self {
New(ref data) => *data.name(),
DeletePrivate(ref address) => *address.name(),
}
}
pub fn owner(&self) -> Option<PublicKey> {
match self {
Self::New(data) => data.owner().cloned(),
Self::DeletePrivate(_) => None,
}
}
}