use std::{marker::PhantomData, sync::Arc};
use crate::models::{
CosmosResponse, CosmosStatus, DiagnosticsContext, ResponseBody, ResponseHeaders,
};
use serde::de::DeserializeOwned;
#[derive(Debug)]
#[non_exhaustive]
pub struct ResourceResponse<T> {
response: CosmosResponse,
_marker: PhantomData<fn() -> T>,
}
impl<T> ResourceResponse<T> {
pub(crate) fn new(response: CosmosResponse) -> Self {
Self {
response,
_marker: PhantomData,
}
}
pub fn status(&self) -> CosmosStatus {
self.response.status()
}
pub fn headers(&self) -> &ResponseHeaders {
self.response.cosmos_headers()
}
pub fn into_body(self) -> ResponseBody {
self.response.into_body()
}
pub fn diagnostics(&self) -> Arc<DiagnosticsContext> {
self.response.diagnostics()
}
}
impl<T: DeserializeOwned> ResourceResponse<T> {
pub fn into_model(self) -> crate::Result<T> {
self.response.into_model::<T>()
}
}