commit 93790dae176aca559c1e587a0c0198e5bc1a9051
parent 5f91de8bc6664d32c71a174c972117e14b1f7b35
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 00:53:57 +0000
app-core: add geolocation types
- define geolocation position structure with optional fields
- add geolocation result alias for client operations
- introduce async geolocation trait for current position
- add unit test for optional position values
Diffstat:
2 files changed, 49 insertions(+), 0 deletions(-)
diff --git a/crates/core/src/geolocation/mod.rs b/crates/core/src/geolocation/mod.rs
@@ -1,3 +1,9 @@
pub mod error;
+pub mod types;
pub use error::{RadrootsClientGeolocationError, RadrootsClientGeolocationErrorMessage};
+pub use types::{
+ RadrootsClientGeolocation,
+ RadrootsClientGeolocationPosition,
+ RadrootsClientGeolocationResult,
+};
diff --git a/crates/core/src/geolocation/types.rs b/crates/core/src/geolocation/types.rs
@@ -0,0 +1,43 @@
+use async_trait::async_trait;
+
+use super::RadrootsClientGeolocationError;
+
+pub type RadrootsClientGeolocationResult<T> =
+ Result<T, RadrootsClientGeolocationError>;
+
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub struct RadrootsClientGeolocationPosition {
+ pub lat: f64,
+ pub lng: f64,
+ pub accuracy: Option<f64>,
+ pub altitude: Option<f64>,
+ pub altitude_accuracy: Option<f64>,
+}
+
+#[async_trait(?Send)]
+pub trait RadrootsClientGeolocation {
+ async fn current(
+ &self,
+ ) -> RadrootsClientGeolocationResult<RadrootsClientGeolocationPosition>;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::RadrootsClientGeolocationPosition;
+
+ #[test]
+ fn position_tracks_optional_fields() {
+ let position = RadrootsClientGeolocationPosition {
+ lat: 1.0,
+ lng: 2.0,
+ accuracy: Some(3.0),
+ altitude: None,
+ altitude_accuracy: Some(4.0),
+ };
+ assert_eq!(position.lat, 1.0);
+ assert_eq!(position.lng, 2.0);
+ assert_eq!(position.accuracy, Some(3.0));
+ assert_eq!(position.altitude, None);
+ assert_eq!(position.altitude_accuracy, Some(4.0));
+ }
+}