app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

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:
Mcrates/core/src/geolocation/mod.rs | 6++++++
Acrates/core/src/geolocation/types.rs | 43+++++++++++++++++++++++++++++++++++++++++++
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)); + } +}