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;
9use script_bindings::root::DomRoot;
10use script_bindings::script_runtime::CanGc;
11
12use crate::dom::bindings::reflector::reflect_dom_object;
13use crate::dom::globalscope::GlobalScope;
14
15#[dom_struct]
16pub struct GeolocationCoordinates {
17    reflector_: Reflector,
18    accuracy: Finite<f64>,
19    latitude: Finite<f64>,
20    longitude: Finite<f64>,
21    altitude: Option<Finite<f64>>,
22    altitude_accuracy: Option<Finite<f64>>,
23    heading: Option<Finite<f64>>,
24    speed: Option<Finite<f64>>,
25}
26
27impl GeolocationCoordinates {
28    fn new_inherited(
29        accuracy: Finite<f64>,
30        latitude: Finite<f64>,
31        longitude: Finite<f64>,
32        altitude: Option<Finite<f64>>,
33        altitude_accuracy: Option<Finite<f64>>,
34        heading: Option<Finite<f64>>,
35        speed: Option<Finite<f64>>,
36    ) -> Self {
37        GeolocationCoordinates {
38            reflector_: Reflector::new(),
39            accuracy,
40            latitude,
41            longitude,
42            altitude,
43            altitude_accuracy,
44            heading,
45            speed,
46        }
47    }
48
49    #[expect(unused, clippy::too_many_arguments)]
50    pub(crate) fn new(
51        global: &GlobalScope,
52        accuracy: Finite<f64>,
53        latitude: Finite<f64>,
54        longitude: Finite<f64>,
55        altitude: Option<Finite<f64>>,
56        altitude_accuracy: Option<Finite<f64>>,
57        heading: Option<Finite<f64>>,
58        speed: Option<Finite<f64>>,
59        can_gc: CanGc,
60    ) -> DomRoot<Self> {
61        reflect_dom_object(
62            Box::new(Self::new_inherited(
63                accuracy,
64                latitude,
65                longitude,
66                altitude,
67                altitude_accuracy,
68                heading,
69                speed,
70            )),
71            global,
72            can_gc,
73        )
74    }
75}
76
77impl GeolocationCoordinatesMethods<crate::DomTypeHolder> for GeolocationCoordinates {
78    fn Accuracy(&self) -> Finite<f64> {
79        self.accuracy
80    }
81
82    fn Latitude(&self) -> Finite<f64> {
83        self.latitude
84    }
85
86    fn Longitude(&self) -> Finite<f64> {
87        self.longitude
88    }
89
90    fn GetAltitude(&self) -> Option<Finite<f64>> {
91        self.altitude
92    }
93
94    fn GetAltitudeAccuracy(&self) -> Option<Finite<f64>> {
95        self.altitude_accuracy
96    }
97
98    fn GetHeading(&self) -> Option<Finite<f64>> {
99        self.heading
100    }
101
102    fn GetSpeed(&self) -> Option<Finite<f64>> {
103        self.speed
104    }
105}