use std::fmt;
use crate::error::CasError;
use crate::report::CasExecutionReport;
use crate::success::CasSuccess;
#[derive(Debug, Clone)]
pub struct CasOutcome<T, R, E> {
result: Result<CasSuccess<T, R>, CasError<T, E>>,
report: CasExecutionReport,
}
impl<T, R, E> CasOutcome<T, R, E> {
#[inline]
pub(crate) fn new(
result: Result<CasSuccess<T, R>, CasError<T, E>>,
report: CasExecutionReport,
) -> Self {
Self { result, report }
}
#[inline]
pub fn result(&self) -> &Result<CasSuccess<T, R>, CasError<T, E>> {
&self.result
}
#[inline]
pub fn report(&self) -> &CasExecutionReport {
&self.report
}
#[inline]
pub fn is_ok(&self) -> bool {
self.result.is_ok()
}
#[inline]
pub fn is_err(&self) -> bool {
self.result.is_err()
}
#[inline]
pub fn into_result(self) -> Result<CasSuccess<T, R>, CasError<T, E>> {
self.result
}
#[inline]
pub fn into_parts(self) -> (Result<CasSuccess<T, R>, CasError<T, E>>, CasExecutionReport) {
(self.result, self.report)
}
#[inline]
pub fn expect(self, message: &str) -> CasSuccess<T, R>
where
E: fmt::Debug,
{
self.result.expect(message)
}
#[inline]
pub fn expect_err(self, message: &str) -> CasError<T, E>
where
T: fmt::Debug,
R: fmt::Debug,
{
self.result.expect_err(message)
}
}