google-geo-type 1.0.0

Google Cloud Client Libraries for Rust - Common Geo Types
Documentation
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

#![allow(rustdoc::bare_urls)]
#![allow(rustdoc::broken_intra_doc_links)]
#![allow(rustdoc::invalid_html_tags)]
#![allow(rustdoc::redundant_explicit_links)]
#![no_implicit_prelude]
extern crate bytes;
extern crate google_cloud_type;
extern crate serde;
extern crate serde_json;
extern crate serde_with;
extern crate std;
extern crate wkt;

mod debug;
mod deserialize;
mod serialize;

/// A latitude-longitude viewport, represented as two diagonally opposite `low`
/// and `high` points. A viewport is considered a closed region, i.e. it includes
/// its boundary. The latitude bounds must range between -90 to 90 degrees
/// inclusive, and the longitude bounds must range between -180 to 180 degrees
/// inclusive. Various cases include:
///
/// - If `low` = `high`, the viewport consists of that single point.
///
/// - If `low.longitude` > `high.longitude`, the longitude range is inverted
///   (the viewport crosses the 180 degree longitude line).
///
/// - If `low.longitude` = -180 degrees and `high.longitude` = 180 degrees,
///   the viewport includes all longitudes.
///
/// - If `low.longitude` = 180 degrees and `high.longitude` = -180 degrees,
///   the longitude range is empty.
///
/// - If `low.latitude` > `high.latitude`, the latitude range is empty.
///
///
/// Both `low` and `high` must be populated, and the represented box cannot be
/// empty (as specified by the definitions above). An empty viewport will result
/// in an error.
///
/// For example, this viewport fully encloses New York City:
///
/// {
/// "low": {
/// "latitude": 40.477398,
/// "longitude": -74.259087
/// },
/// "high": {
/// "latitude": 40.91618,
/// "longitude": -73.70018
/// }
/// }
#[derive(Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct Viewport {
    /// Required. The low point of the viewport.
    pub low: std::option::Option<google_cloud_type::model::LatLng>,

    /// Required. The high point of the viewport.
    pub high: std::option::Option<google_cloud_type::model::LatLng>,

    pub(crate) _unknown_fields: serde_json::Map<std::string::String, serde_json::Value>,
}

impl Viewport {
    /// Creates a new default instance.
    pub fn new() -> Self {
        std::default::Default::default()
    }

    /// Sets the value of [low][crate::model::Viewport::low].
    ///
    /// # Example
    /// ```ignore,no_run
    /// # use google_geo_type::model::Viewport;
    /// use google_cloud_type::model::LatLng;
    /// let x = Viewport::new().set_low(LatLng::default()/* use setters */);
    /// ```
    pub fn set_low<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<google_cloud_type::model::LatLng>,
    {
        self.low = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [low][crate::model::Viewport::low].
    ///
    /// # Example
    /// ```ignore,no_run
    /// # use google_geo_type::model::Viewport;
    /// use google_cloud_type::model::LatLng;
    /// let x = Viewport::new().set_or_clear_low(Some(LatLng::default()/* use setters */));
    /// let x = Viewport::new().set_or_clear_low(None::<LatLng>);
    /// ```
    pub fn set_or_clear_low<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<google_cloud_type::model::LatLng>,
    {
        self.low = v.map(|x| x.into());
        self
    }

    /// Sets the value of [high][crate::model::Viewport::high].
    ///
    /// # Example
    /// ```ignore,no_run
    /// # use google_geo_type::model::Viewport;
    /// use google_cloud_type::model::LatLng;
    /// let x = Viewport::new().set_high(LatLng::default()/* use setters */);
    /// ```
    pub fn set_high<T>(mut self, v: T) -> Self
    where
        T: std::convert::Into<google_cloud_type::model::LatLng>,
    {
        self.high = std::option::Option::Some(v.into());
        self
    }

    /// Sets or clears the value of [high][crate::model::Viewport::high].
    ///
    /// # Example
    /// ```ignore,no_run
    /// # use google_geo_type::model::Viewport;
    /// use google_cloud_type::model::LatLng;
    /// let x = Viewport::new().set_or_clear_high(Some(LatLng::default()/* use setters */));
    /// let x = Viewport::new().set_or_clear_high(None::<LatLng>);
    /// ```
    pub fn set_or_clear_high<T>(mut self, v: std::option::Option<T>) -> Self
    where
        T: std::convert::Into<google_cloud_type::model::LatLng>,
    {
        self.high = v.map(|x| x.into());
        self
    }
}

impl wkt::message::Message for Viewport {
    fn typename() -> &'static str {
        "type.googleapis.com/google.geo.type.Viewport"
    }
}