reed_solomon_erasure/
errors.rsuse core::fmt::Formatter;
#[derive(PartialEq, Debug, Clone, Copy)]
pub enum Error {
TooFewShards,
TooManyShards,
TooFewDataShards,
TooManyDataShards,
TooFewParityShards,
TooManyParityShards,
TooFewBufferShards,
TooManyBufferShards,
IncorrectShardSize,
TooFewShardsPresent,
EmptyShard,
InvalidShardFlags,
InvalidIndex,
}
impl Error {
fn to_string(&self) -> &str {
match *self {
Error::TooFewShards=> "The number of provided shards is smaller than the one in codec",
Error::TooManyShards => "The number of provided shards is greater than the one in codec",
Error::TooFewDataShards => "The number of provided data shards is smaller than the one in codec",
Error::TooManyDataShards => "The number of provided data shards is greater than the one in codec",
Error::TooFewParityShards => "The number of provided parity shards is smaller than the one in codec",
Error::TooManyParityShards => "The number of provided parity shards is greater than the one in codec",
Error::TooFewBufferShards => "The number of provided buffer shards is smaller than the number of parity shards in codec",
Error::TooManyBufferShards => "The number of provided buffer shards is greater than the number of parity shards in codec",
Error::IncorrectShardSize => "At least one of the provided shards is not of the correct size",
Error::TooFewShardsPresent => "The number of shards present is smaller than number of parity shards, cannot reconstruct missing shards",
Error::EmptyShard => "The first shard provided is of zero length",
Error::InvalidShardFlags => "The number of flags does not match the total number of shards",
Error::InvalidIndex => "The data shard index provided is greater or equal to the number of data shards in codec",
}
}
}
impl core::fmt::Display for Error {
fn fmt(&self, f: &mut Formatter) -> Result<(), core::fmt::Error> {
write!(f, "{}", self.to_string())
}
}
#[cfg(feature = "std")]
impl std::error::Error for Error {
fn description(&self) -> &str {
self.to_string()
}
}
#[derive(PartialEq, Debug, Clone, Copy)]
pub enum SBSError {
TooManyCalls,
LeftoverShards,
RSError(Error),
}
impl SBSError {
fn to_string(&self) -> &str {
match *self {
SBSError::TooManyCalls => "Too many calls",
SBSError::LeftoverShards => "Leftover shards",
SBSError::RSError(ref e) => e.to_string(),
}
}
}
impl core::fmt::Display for SBSError {
fn fmt(&self, f: &mut Formatter) -> Result<(), core::fmt::Error> {
write!(f, "{}", self.to_string())
}
}
#[cfg(feature = "std")]
impl std::error::Error for SBSError {
fn description(&self) -> &str {
self.to_string()
}
}
#[cfg(test)]
mod tests {
use crate::errors::Error;
use crate::errors::SBSError;
#[test]
fn test_error_to_string_is_okay() {
assert_eq!(
Error::TooFewShards.to_string(),
"The number of provided shards is smaller than the one in codec"
);
assert_eq!(
Error::TooManyShards.to_string(),
"The number of provided shards is greater than the one in codec"
);
assert_eq!(
Error::TooFewDataShards.to_string(),
"The number of provided data shards is smaller than the one in codec"
);
assert_eq!(
Error::TooManyDataShards.to_string(),
"The number of provided data shards is greater than the one in codec"
);
assert_eq!(
Error::TooFewParityShards.to_string(),
"The number of provided parity shards is smaller than the one in codec"
);
assert_eq!(
Error::TooManyParityShards.to_string(),
"The number of provided parity shards is greater than the one in codec"
);
assert_eq!(
Error::TooFewBufferShards.to_string(),
"The number of provided buffer shards is smaller than the number of parity shards in codec"
);
assert_eq!(
Error::TooManyBufferShards.to_string(),
"The number of provided buffer shards is greater than the number of parity shards in codec"
);
assert_eq!(
Error::IncorrectShardSize.to_string(),
"At least one of the provided shards is not of the correct size"
);
assert_eq!(Error::TooFewShardsPresent.to_string(), "The number of shards present is smaller than number of parity shards, cannot reconstruct missing shards");
assert_eq!(
Error::EmptyShard.to_string(),
"The first shard provided is of zero length"
);
assert_eq!(
Error::InvalidShardFlags.to_string(),
"The number of flags does not match the total number of shards"
);
assert_eq!(
Error::InvalidIndex.to_string(),
"The data shard index provided is greater or equal to the number of data shards in codec"
);
}
#[test]
fn test_sbserror_to_string_is_okay() {
assert_eq!(SBSError::TooManyCalls.to_string(), "Too many calls");
assert_eq!(SBSError::LeftoverShards.to_string(), "Leftover shards");
}
#[cfg(feature = "std")]
#[test]
fn test_error_display_does_not_panic() {
println!("{}", Error::TooFewShards);
}
#[cfg(feature = "std")]
#[test]
fn test_sbserror_display_does_not_panic() {
println!("{}", SBSError::TooManyCalls);
}
}