#![allow(clippy::ref_option, reason = "for the getset crate")]
use crate::places_new::FieldMask;
use crate::places_new::types::request::{LocationRestriction, PlaceTypeSet, RankPreference};
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 {
#[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 location_restriction: LocationRestriction,
#[serde(default, skip_serializing_if = "PlaceTypeSet::is_empty")]
#[builder(default, into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub included_types: PlaceTypeSet,
#[serde(default, skip_serializing_if = "PlaceTypeSet::is_empty")]
#[builder(default, into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub excluded_types: PlaceTypeSet,
#[serde(default, skip_serializing_if = "PlaceTypeSet::is_empty")]
#[builder(default, into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub included_primary_types: PlaceTypeSet,
#[serde(default, skip_serializing_if = "PlaceTypeSet::is_empty")]
#[builder(default, into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub excluded_primary_types: PlaceTypeSet,
#[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(skip_serializing_if = "Option::is_none")]
#[builder(into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub max_result_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(into)]
#[getset(get = "pub", set = "pub", get_mut = "pub")]
pub rank_preference: Option<RankPreference>,
#[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>,
}
impl Request {
pub fn new(
location_restriction: impl Into<LocationRestriction>,
field_mask: impl Into<FieldMask>,
) -> Self {
Self {
location_restriction: location_restriction.into(),
field_mask: field_mask.into(),
included_types: PlaceTypeSet::default(),
excluded_types: PlaceTypeSet::default(),
included_primary_types: PlaceTypeSet::default(),
excluded_primary_types: PlaceTypeSet::default(),
language: None,
max_result_count: None,
rank_preference: None,
region: None,
}
}
#[cfg(feature = "reqwest")]
#[must_use]
pub fn with_client(
self,
client: &crate::Client
) -> crate::places_new::nearby_search::RequestWithClient<'_> {
crate::places_new::nearby_search::RequestWithClient {
client,
location_restriction: self.location_restriction,
field_mask: self.field_mask,
included_types: self.included_types,
excluded_types: self.excluded_types,
included_primary_types: self.included_primary_types,
excluded_primary_types: self.excluded_primary_types,
language: self.language,
max_result_count: self.max_result_count,
rank_preference: self.rank_preference,
region: self.region,
}
}
}
#[cfg(feature = "reqwest")]
impl std::convert::From<crate::places_new::nearby_search::RequestWithClient<'_>> for Request {
fn from(request: crate::places_new::nearby_search::RequestWithClient) -> Self {
Self {
location_restriction: request.location_restriction,
field_mask: request.field_mask,
included_types: request.included_types,
excluded_types: request.excluded_types,
included_primary_types: request.included_primary_types,
excluded_primary_types: request.excluded_primary_types,
language: request.language,
max_result_count: request.max_result_count,
rank_preference: request.rank_preference,
region: request.region,
}
}
}