use std::collections::HashMap;
use crate::http_client::HttpClient;
use crate::error::Result;
use crate::models::{ReverseGeocodeResponse, ReverseGeocodeWithTimezoneResponse, TimezoneResponse};
#[derive(Clone)]
pub struct ReverseGeocodingApi {
http: HttpClient,
}
impl ReverseGeocodingApi {
pub fn new(http: HttpClient) -> Self { Self { http } }
pub fn reverse_geocode(&self, latitude: f64, longitude: f64, locality_language: &str) -> Result<ReverseGeocodeResponse> {
self.http.get("reverse-geocode", latlon(latitude, longitude, locality_language))
}
pub fn reverse_geocode_with_timezone(&self, latitude: f64, longitude: f64, locality_language: &str) -> Result<ReverseGeocodeWithTimezoneResponse> {
self.http.get("reverse-geocode-with-timezone", latlon(latitude, longitude, locality_language))
}
pub fn get_timezone_by_location(&self, latitude: f64, longitude: f64) -> Result<TimezoneResponse> {
let mut p = HashMap::new();
p.insert("latitude".to_string(), latitude.to_string());
p.insert("longitude".to_string(), longitude.to_string());
self.http.get("timezone-by-location", p)
}
}
fn latlon(lat: f64, lon: f64, lang: &str) -> HashMap<String, String> {
let mut p = HashMap::new();
p.insert("latitude".to_string(), lat.to_string());
p.insert("longitude".to_string(), lon.to_string());
p.insert("localityLanguage".to_string(), lang.to_string());
p
}