use std::sync::Arc;
use crate::models::{CosmosStatus, DiagnosticsContext, ResponseBody, ResponseHeaders};
use azure_data_cosmos_driver::models::CosmosResponse as DriverResponse;
use serde::de::DeserializeOwned;
#[derive(Debug)]
pub(crate) struct CosmosResponse {
body: ResponseBody,
cosmos_headers: ResponseHeaders,
status: CosmosStatus,
diagnostics: Arc<DiagnosticsContext>,
}
impl CosmosResponse {
pub(crate) fn from_driver_parts(
body: ResponseBody,
cosmos_headers: ResponseHeaders,
status: CosmosStatus,
diagnostics: Arc<DiagnosticsContext>,
) -> Self {
Self {
body,
cosmos_headers,
status,
diagnostics,
}
}
pub(crate) fn from_driver_response(driver_response: DriverResponse) -> Self {
let status: CosmosStatus = driver_response.status();
let cosmos_headers: ResponseHeaders = driver_response.headers().clone().into();
let diagnostics = driver_response.diagnostics();
let body: ResponseBody = driver_response.into_body().into();
Self::from_driver_parts(body, cosmos_headers, status, diagnostics)
}
pub(crate) fn status(&self) -> CosmosStatus {
self.status
}
pub(crate) fn cosmos_headers(&self) -> &ResponseHeaders {
&self.cosmos_headers
}
pub(crate) fn into_body(self) -> ResponseBody {
self.body
}
pub(crate) fn diagnostics(&self) -> Arc<DiagnosticsContext> {
Arc::clone(&self.diagnostics)
}
pub(crate) fn into_model<T: DeserializeOwned>(self) -> crate::Result<T> {
self.body.into_single()
}
}