Skip to main content

script/dom/geolocation/
geolocationcoordinates.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use dom_struct::dom_struct;
6use script_bindings::codegen::GenericBindings::GeolocationCoordinatesBinding::GeolocationCoordinatesMethods;
7use script_bindings::num::Finite;
8use script_bindings::reflector::{Reflector, reflect_dom_object};
9use script_bindings::root::DomRoot;
10use script_bindings::script_runtime::CanGc;
11
12use crate::dom::globalscope::GlobalScope;
13
14#[dom_struct]
15pub struct GeolocationCoordinates {
16    reflector_: Reflector,
17    accuracy: Finite<f64>,
18    latitude: Finite<f64>,
19    longitude: Finite<f64>,
20    altitude: Option<Finite<f64>>,
21    altitude_accuracy: Option<Finite<f64>>,
22    heading: Option<Finite<f64>>,
23    speed: Option<Finite<f64>>,
24}
25
26impl GeolocationCoordinates {
27    fn new_inherited(
28        accuracy: Finite<f64>,
29        latitude: Finite<f64>,
30        longitude: Finite<f64>,
31        altitude: Option<Finite<f64>>,
32        altitude_accuracy: Option<Finite<f64>>,
33        heading: Option<Finite<f64>>,
34        speed: Option<Finite<f64>>,
35    ) -> Self {
36        GeolocationCoordinates {
37            reflector_: Reflector::new(),
38            accuracy,
39            latitude,
40            longitude,
41            altitude,
42            altitude_accuracy,
43            heading,
44            speed,
45        }
46    }
47
48    #[expect(unused, clippy::too_many_arguments)]
49    pub(crate) fn new(
50        global: &GlobalScope,
51        accuracy: Finite<f64>,
52        latitude: Finite<f64>,
53        longitude: Finite<f64>,
54        altitude: Option<Finite<f64>>,
55        altitude_accuracy: Option<Finite<f64>>,
56        heading: Option<Finite<f64>>,
57        speed: Option<Finite<f64>>,
58        can_gc: CanGc,
59    ) -> DomRoot<Self> {
60        reflect_dom_object(
61            Box::new(Self::new_inherited(
62                accuracy,
63                latitude,
64                longitude,
65                altitude,
66                altitude_accuracy,
67                heading,
68                speed,
69            )),
70            global,
71            can_gc,
72        )
73    }
74}
75
76impl GeolocationCoordinatesMethods<crate::DomTypeHolder> for GeolocationCoordinates {
77    fn Accuracy(&self) -> Finite<f64> {
78        self.accuracy
79    }
80
81    fn Latitude(&self) -> Finite<f64> {
82        self.latitude
83    }
84
85    fn Longitude(&self) -> Finite<f64> {
86        self.longitude
87    }
88
89    fn GetAltitude(&self) -> Option<Finite<f64>> {
90        self.altitude
91    }
92
93    fn GetAltitudeAccuracy(&self) -> Option<Finite<f64>> {
94        self.altitude_accuracy
95    }
96
97    fn GetHeading(&self) -> Option<Finite<f64>> {
98        self.heading
99    }
100
101    fn GetSpeed(&self) -> Option<Finite<f64>> {
102        self.speed
103    }
104}