qualia_core_db/domains/geospatial/adapters/
dem_adapter.rs1use crate::domains::geospatial::adapters::AdapterHttpRequest;
2use crate::net::disclosure::NetworkDisclosureRegistry;
3
4pub struct DemAdapter {
5 pub id: &'static str,
6 pub endpoint: String,
7}
8
9impl DemAdapter {
10 pub fn new(id: &'static str, endpoint: &str) -> Self {
11 Self {
12 id,
13 endpoint: endpoint.to_string(),
14 }
15 }
16
17 pub fn adapter_id(&self) -> &'static str {
18 self.id
19 }
20
21 pub fn build_fetch_request(
22 &self,
23 bbox: (f64, f64, f64, f64),
24 _time_range: (u64, u64),
25 registry: &NetworkDisclosureRegistry,
26 ) -> Result<AdapterHttpRequest, String> {
27 if !registry.check_egress_consent(self.adapter_id(), &self.endpoint) {
28 return Err(format!(
29 "Consent denied or unregistered for endpoint {} by adapter {}",
30 self.endpoint,
31 self.adapter_id()
32 ));
33 }
34
35 let query = format!(
37 "{}?SERVICE=WCS&VERSION=2.0.1&REQUEST=GetCoverage&SUBSET=x({},{})&SUBSET=y({},{})",
38 self.endpoint, bbox.0, bbox.2, bbox.1, bbox.3
39 );
40
41 Ok(AdapterHttpRequest::get(query, "DEM"))
42 }
43
44 pub fn fetch_region(
45 &self,
46 bbox: (f64, f64, f64, f64),
47 time_range: (u64, u64),
48 registry: &NetworkDisclosureRegistry,
49 ) -> Result<(), String> {
50 let request = self.build_fetch_request(bbox, time_range, registry)?;
51 super::execute_http_request_status(&request)?;
52 Ok(())
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn test_dem_adapter_egress() {
64 let adapter = DemAdapter::new("dem_adapter", "https://elevation.example.com");
65 let mut registry = NetworkDisclosureRegistry::new();
66
67 let res1 = adapter.fetch_region((0.0, 0.0, 1.0, 1.0), (0, 0), ®istry);
68 assert!(res1.is_err());
69
70 registry.register_egress(
71 adapter.adapter_id(),
72 "https://elevation.example.com",
73 "Fetch DEM data",
74 "User viewed map",
75 );
76
77 let res2 = adapter.fetch_region((0.0, 0.0, 1.0, 1.0), (0, 0), ®istry);
78 if let Err(e) = res2 {
79 assert!(
80 !e.contains("Consent denied"),
81 "Failed on consent when it should have been granted: {}",
82 e
83 );
84 }
85 }
86}