use crate::clients::FileSystemClient;
use crate::Properties;
use azure_core::prelude::*;
use azure_core::{
error::Result,
headers::{etag_from_headers, last_modified_from_headers},
AppendToUrlQuery, Etag, Response as HttpResponse,
};
use azure_storage::core::headers::CommonStorageResponseHeaders;
use chrono::{DateTime, Utc};
use std::convert::TryInto;
type SetFileSystemProperties =
futures::future::BoxFuture<'static, Result<SetFileSystemPropertiesResponse>>;
#[derive(Debug, Clone)]
pub struct SetFileSystemPropertiesBuilder {
client: FileSystemClient,
properties: Option<Properties>,
if_modified_since_condition: Option<IfModifiedSinceCondition>,
client_request_id: Option<ClientRequestId>,
timeout: Option<Timeout>,
}
impl SetFileSystemPropertiesBuilder {
pub(crate) fn new(client: FileSystemClient, properties: Option<Properties>) -> Self {
Self {
client,
if_modified_since_condition: None,
client_request_id: None,
timeout: None,
properties,
}
}
setters! {
properties: Properties => Some(properties),
if_modified_since_condition: IfModifiedSinceCondition => Some(if_modified_since_condition),
client_request_id: ClientRequestId => Some(client_request_id),
timeout: Timeout => Some(timeout),
}
pub fn into_future(self) -> SetFileSystemProperties {
let this = self.clone();
let ctx = self.client.context.clone();
Box::pin(async move {
let mut url = this.client.url()?;
self.timeout.append_to_url_query(&mut url);
url.query_pairs_mut().append_pair("resource", "filesystem");
let mut request = this
.client
.prepare_request(url.as_str(), http::Method::PATCH);
request.insert_headers(&this.client_request_id);
request.insert_headers(&this.if_modified_since_condition);
request.insert_headers(&this.properties);
request.insert_headers(&ContentLength::new(0));
let response = self
.client
.pipeline()
.send(&mut ctx.clone(), &mut request)
.await?;
SetFileSystemPropertiesResponse::try_from(response).await
})
}
}
#[derive(Debug, Clone)]
pub struct SetFileSystemPropertiesResponse {
pub common_storage_response_headers: CommonStorageResponseHeaders,
pub etag: Etag,
pub last_modified: DateTime<Utc>,
}
impl SetFileSystemPropertiesResponse {
pub async fn try_from(response: HttpResponse) -> Result<Self> {
let (_status_code, headers, _pinned_stream) = response.deconstruct();
Ok(SetFileSystemPropertiesResponse {
common_storage_response_headers: (&headers).try_into()?,
etag: Etag::from(etag_from_headers(&headers)?),
last_modified: last_modified_from_headers(&headers)?,
})
}
}