use super::{operation_id, register::RegisterRead, Error, OperationId, QueryResponse, Result};
use crate::types::ChunkAddress;
use serde::{Deserialize, Serialize};
use xor_name::XorName;
#[allow(clippy::large_enum_variant)]
#[derive(Hash, Eq, PartialEq, PartialOrd, Clone, Serialize, Deserialize, Debug)]
pub enum DataQuery {
GetChunk(ChunkAddress),
Register(RegisterRead),
}
impl DataQuery {
pub fn error(&self, error: Error) -> Result<QueryResponse> {
use DataQuery::*;
match self {
GetChunk(_) => Ok(QueryResponse::GetChunk(Err(error))),
Register(q) => q.error(error),
}
}
pub fn dst_name(&self) -> XorName {
use DataQuery::*;
match self {
GetChunk(address) => *address.name(),
Register(q) => q.dst_name(),
}
}
pub fn operation_id(&self) -> Result<OperationId> {
match self {
DataQuery::GetChunk(address) => operation_id(address),
DataQuery::Register(read) => read.operation_id(),
}
}
}