qualia_core_db/domains/geospatial/adapters/
astrometry_adapter.rs1use crate::domains::geospatial::adapters::{AdapterHttpRequest, DataAdapter};
2use crate::net::disclosure::NetworkDisclosureRegistry;
3
4pub struct AstrometryAdapter {
6 pub id: &'static str,
7 pub endpoint: String,
8}
9
10impl AstrometryAdapter {
11 pub fn new(id: &'static str, endpoint: &str) -> Self {
12 Self {
13 id,
14 endpoint: endpoint.to_string(),
15 }
16 }
17}
18
19impl DataAdapter for AstrometryAdapter {
20 fn adapter_id(&self) -> &'static str {
21 self.id
22 }
23
24 fn build_fetch_request(
25 &self,
26 _bbox: (f64, f64, f64, f64),
27 time_range: (u64, u64),
28 registry: &NetworkDisclosureRegistry,
29 ) -> Result<AdapterHttpRequest, String> {
30 if !registry.check_egress_consent(self.adapter_id(), &self.endpoint) {
31 return Err(format!(
32 "Consent denied or unregistered for astrometry endpoint {}",
33 self.endpoint
34 ));
35 }
36
37 let url = format!(
38 "{}?format=json&START_TIME={}&STOP_TIME={}",
39 self.endpoint, time_range.0, time_range.1
40 );
41
42 Ok(AdapterHttpRequest::get(url, "Astrometry"))
43 }
44
45 fn primary_endpoint(&self) -> &str {
46 &self.endpoint
47 }
48
49 fn estimate_tile_count(&self, _bbox: (f64, f64, f64, f64)) -> u32 {
50 1
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn test_astrometry_adapter_consent_denied() {
60 let registry = NetworkDisclosureRegistry::new();
61 let adapter = AstrometryAdapter::new(
62 "astrometry_adapter",
63 "https://ssd.jpl.nasa.gov/api/horizons.api",
64 );
65
66 let res = adapter.fetch_region((0.0, 0.0, 1.0, 1.0), (0, 0), ®istry);
67 assert!(res.is_err());
68 }
69}