#![allow(clippy::ref_option, reason = "for the getset crate")]
use crate::places_new::FieldMask;
use icu_locale::Locale;
use rust_iso3166::CountryCode;
#[derive(
//std
Clone,
Debug,
// serde
serde::Serialize,
// getset
getset::Getters,
getset::CopyGetters,
getset::MutGetters,
getset::Setters,
// other
bon::Builder
)]
#[serde(rename_all = "camelCase")]
pub struct Request<'c> {
#[serde(skip_deserializing, skip_serializing)]
pub(crate) client: &'c crate::Client,
#[serde(skip)]
#[builder(into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub field_mask: FieldMask,
#[builder(into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub place_id: String,
#[serde(
rename = "languageCode",
default,
skip_serializing_if = "Option::is_none",
serialize_with = "crate::places_new::serde::serialize_optional_locale",
deserialize_with = "crate::places_new::serde::deserialize_optional_locale"
)]
#[builder(into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub language: Option<Locale>,
#[serde(
rename = "regionCode",
default,
skip_serializing_if = "Option::is_none",
serialize_with = "crate::places_new::serde::serialize_optional_country_code",
deserialize_with = "crate::places_new::serde::deserialize_optional_country_code"
)]
pub region: Option<CountryCode>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub session_token: Option<uuid::Uuid>,
}
#[cfg(feature = "reqwest")]
impl Request<'_> {
pub async fn execute(self) -> Result<crate::places_new::place_details::Response, crate::Error> {
let response = self.client.get_request(&self).await?;
Ok(response)
}
}
#[cfg(feature = "reqwest")]
impl<S: request_builder::State> RequestBuilder<'_, S> {
pub async fn execute(self) -> Result<crate::places_new::place_details::Response, crate::Error>
where
S: request_builder::IsComplete,
{
let request = self.build(); let response = request.client.get_request(&request).await?;
Ok(response)
}
}
impl crate::client::Client {
pub fn place_details(
&self,
place_id: impl Into<String>,
) -> Result<
RequestBuilder<
'_,
crate::places_new::place_details::request::request_builder::SetPlaceId<
crate::places_new::place_details::request::request_builder::SetClient
>
>,
crate::Error,
> {
let place_id: String = place_id.into();
Ok(Request::builder()
.client(self)
.place_id(place_id))
}
}
#[cfg(feature = "reqwest")]
use crate::request_rate::api::Api;
impl crate::traits::EndPoint for &Request<'_> {
fn service_url() -> &'static str {
""
}
fn output_format() -> std::option::Option<&'static str> {
None }
#[cfg(feature = "reqwest")]
fn title() -> &'static str {
"Places API (New) Place Details"
}
#[cfg(feature = "reqwest")]
fn apis() -> &'static [Api] {
&[Api::All, Api::PlacesNew, Api::PlaceDetails]
}
}
#[cfg(feature = "reqwest")]
impl crate::traits::RequestBody for &Request<'_> {
fn request_body(&self) -> Result<String, crate::Error> {
Ok(serde_json::to_string(self)?)
}
}
#[cfg(feature = "reqwest")]
impl crate::traits::QueryString for &Request<'_> {
fn query_string(&self) -> String {
format!(
"https://places.googleapis.com/v1/places/{place_id}",
place_id = self.place_id()
)
}
}
#[cfg(feature = "reqwest")]
impl crate::traits::RequestHeaders for &Request<'_> {
fn request_headers(&self) -> reqwest::header::HeaderMap {
let field_mask = self.field_mask().to_string();
let mut headers = reqwest::header::HeaderMap::new();
match reqwest::header::HeaderValue::from_str(field_mask.as_str()) {
Ok(header_value) => { headers.insert("X-Goog-FieldMask", header_value); },
Err(error) => tracing::error!("error building request headers: {error}"),
}
headers
}
fn send_x_goog_api_key() -> bool {
true
}
}
#[cfg(feature = "reqwest")]
impl crate::traits::Validatable for &Request<'_> {
fn validate(&self) -> Result<(), crate::Error> {
Ok(())
}
}