use super::Sample;
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SamplingResult {
Empty,
Void,
ResultWithSample(Sample),
}
impl SamplingResult {
pub fn optional(&self) -> Option<&Sample> {
match self {
SamplingResult::ResultWithSample(sample) => Some(sample),
_ => None,
}
}
pub fn len(&self) -> usize {
match self {
SamplingResult::Empty | SamplingResult::Void => 0,
SamplingResult::ResultWithSample(sample) => sample.len(),
}
}
pub fn is_empty(&self) -> bool {
match self {
SamplingResult::Empty | SamplingResult::Void => true,
SamplingResult::ResultWithSample(sample) => sample.is_empty(),
}
}
pub fn get_sample(&self) -> Option<&Sample> {
match self {
SamplingResult::ResultWithSample(sample) => Some(sample),
_ => None,
}
}
}
impl From<Sample> for SamplingResult {
fn from(value: Sample) -> Self {
if value.is_empty() {
return SamplingResult::Empty;
}
SamplingResult::ResultWithSample(value)
}
}
impl fmt::Display for SamplingResult {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SamplingResult::Empty => write!(f, "true"),
SamplingResult::Void => write!(f, "false"),
SamplingResult::ResultWithSample(sample) => sample.fmt(f),
}
}
}