use crate::models::{CosmosDiagnostics, CosmosResponse};
use crate::SessionToken;
use azure_core::http::{headers::Headers, response::ResponseBody, Etag, StatusCode};
use serde::de::DeserializeOwned;
#[derive(Debug)]
pub struct ItemResponse<T> {
response: CosmosResponse<T>,
etag: Option<Etag>,
}
impl<T> ItemResponse<T> {
pub(crate) fn new(response: CosmosResponse<T>) -> Self {
let etag = response
.cosmos_headers()
.etag
.as_ref()
.map(|e| Etag::from(e.as_str()));
Self { response, etag }
}
pub fn etag(&self) -> Option<&Etag> {
self.etag.as_ref()
}
pub fn status(&self) -> StatusCode {
self.response.status()
}
pub fn headers(&self) -> &Headers {
self.response.headers()
}
#[cfg(feature = "fault_injection")]
pub fn request_url(&self) -> Option<azure_core::http::Url> {
self.response.request_url()
}
pub fn into_body(self) -> ResponseBody {
self.response.into_body()
}
pub fn request_charge(&self) -> Option<f64> {
self.response.request_charge()
}
pub fn session_token(&self) -> Option<SessionToken> {
self.response.session_token()
}
pub fn diagnostics(&self) -> &CosmosDiagnostics {
self.response.diagnostics()
}
}
impl<T: DeserializeOwned> ItemResponse<T> {
pub fn into_model(self) -> azure_core::Result<T> {
self.response.into_model()
}
}