|
| 1 | +use crate::table::prelude::*; |
| 2 | +use crate::table::responses::*; |
| 3 | +use azure_core::prelude::*; |
| 4 | +use azure_core::{headers::add_optional_header, AppendToUrlQuery}; |
| 5 | +use http::method::Method; |
| 6 | +use http::status::StatusCode; |
| 7 | +use serde::de::DeserializeOwned; |
| 8 | +use std::convert::TryInto; |
| 9 | + |
| 10 | +#[derive(Debug, Clone)] |
| 11 | +pub struct GetEntityBuilder<'a> { |
| 12 | + entity_client: &'a EntityClient, |
| 13 | + select: Option<Select<'a>>, |
| 14 | + client_request_id: Option<ClientRequestId<'a>>, |
| 15 | +} |
| 16 | + |
| 17 | +impl<'a> GetEntityBuilder<'a> { |
| 18 | + pub(crate) fn new(entity_client: &'a EntityClient) -> Self { |
| 19 | + Self { |
| 20 | + entity_client, |
| 21 | + select: None, |
| 22 | + client_request_id: None, |
| 23 | + } |
| 24 | + } |
| 25 | + |
| 26 | + setters! { |
| 27 | + select: Select<'a> => Some(select), |
| 28 | + client_request_id: ClientRequestId<'a> => Some(client_request_id), |
| 29 | + } |
| 30 | + |
| 31 | + pub async fn execute<E>( |
| 32 | + &self, |
| 33 | + ) -> Result<GetEntityResponse<E>, Box<dyn std::error::Error + Sync + Send>> |
| 34 | + where |
| 35 | + E: DeserializeOwned, |
| 36 | + { |
| 37 | + let mut url = self.entity_client.url().to_owned(); |
| 38 | + |
| 39 | + self.select.append_to_url_query(&mut url); |
| 40 | + |
| 41 | + debug!("list tables url = {}", url); |
| 42 | + |
| 43 | + let request = self.entity_client.prepare_request( |
| 44 | + url.as_str(), |
| 45 | + &Method::GET, |
| 46 | + &|mut request| { |
| 47 | + request = add_optional_header(&self.client_request_id, request); |
| 48 | + request = request.header("Accept", "application/json;odata=fullmetadata"); |
| 49 | + request |
| 50 | + }, |
| 51 | + None, |
| 52 | + )?; |
| 53 | + |
| 54 | + debug!("request == {:#?}\n", request); |
| 55 | + |
| 56 | + let response = self |
| 57 | + .entity_client |
| 58 | + .http_client() |
| 59 | + .execute_request_check_status(request.0, StatusCode::OK) |
| 60 | + .await?; |
| 61 | + |
| 62 | + Ok((&response).try_into()?) |
| 63 | + } |
| 64 | +} |
0 commit comments