use crate::status::StatusError;
use crate::status::status_code::StatusCodeError;
#[derive(Debug, Clone)]
pub struct ServerStatusErr(StatusError);
impl std::ops::Deref for ServerStatusErr {
type Target = StatusError;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl ServerStatusErr {
pub fn new(code: StatusCodeError, message: impl Into<String>) -> Self {
ServerStatusErr(StatusError::new(code, message))
}
pub fn from_status(status: StatusError) -> Self {
ServerStatusErr(status)
}
pub(crate) fn into_status(self) -> StatusError {
self.0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_server_status_new() {
let status = ServerStatusErr::new(StatusCodeError::Internal, "not ok");
assert_eq!(status.code(), StatusCodeError::Internal);
assert_eq!(status.message(), "not ok");
}
#[test]
fn test_server_status_deref() {
let status = ServerStatusErr::new(StatusCodeError::FailedPrecondition, "x");
assert_eq!(status.code(), StatusCodeError::FailedPrecondition);
}
#[test]
fn test_server_status_from_status() {
let status = StatusError::new(StatusCodeError::DeadlineExceeded, "DE");
let server_status = ServerStatusErr::from_status(status);
assert_eq!(server_status.code(), StatusCodeError::DeadlineExceeded);
}
#[test]
fn test_server_status_into_status() {
let server_status = ServerStatusErr::new(StatusCodeError::DataLoss, "DL");
let status = server_status.into_status();
assert_eq!(status.code(), StatusCodeError::DataLoss);
}
}