diff --git a/CHANGES.md b/CHANGES.md index 769c5f6..250ef11 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,31 @@ # Changes +## unreleased + +- Remove `chrono` dependency +- update geo-types to 0.7.8 + +### Breaking Changes + +Due to previous security issues caused by the `chrono` crate +the `NaiveDateTime` was replaces by a `UnixTime` type: + +```diff +- use chrono::NaiveDateTime; +- use geocoding::opencage::Timestamp; ++ use geocoding::opencage::{Timestamp, UnixTime}; + + let created_http = "Mon, 16 May 2022 14:52:47 GMT".to_string(); + + let ts_in_seconds = 1_652_712_767_i64; +- let created_unix = NaiveDateTime::from_timestamp(ts_in_seconds, 0); ++ let created_unix = UnixTime::from_seconds(ts_in_seconds); + + let timestamp = Timestamp { created_http, created_unix }; + ++ assert_eq!(ts_in_seconds, created_unix.as_seconds()); +``` + ## 0.4.0 - Update CI to use same Rust versions as geo - Switch GeoAdmin API to WGS84 diff --git a/Cargo.toml b/Cargo.toml index 6f1a7b9..d5d026f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,13 +11,12 @@ edition = "2018" [dependencies] thiserror = "1.0" -geo-types = "0.7" +geo-types = "0.7.8" num-traits = "0.2" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" reqwest = { version = "0.11", default-features = false, features = ["default-tls", "blocking", "json"] } hyper = "0.14.11" -chrono = { version = "0.4", features = ["serde"] } [features] default = ["reqwest/default"] diff --git a/src/lib.rs b/src/lib.rs index 1028844..7e63d9d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -27,9 +27,7 @@ static UA_STRING: &str = "Rust-Geocoding"; -use chrono; -#[allow(deprecated)] -pub use geo_types::{Coordinate, Point}; +pub use geo_types::{Coord, Point}; use num_traits::Float; use reqwest::blocking::Client; use reqwest::header::ToStrError; @@ -103,14 +101,14 @@ where /// Examples /// /// ``` -/// use geocoding::{Coordinate, Forward, Opencage, Point}; +/// use geocoding::{Coord, Forward, Opencage, Point}; /// /// let oc = Opencage::new("dcdbf0d783374909b3debee728c7cc10".to_string()); /// let address = "Schwabing, München"; /// let res: Vec> = oc.forward(address).unwrap(); /// assert_eq!( /// res, -/// vec![Point(Coordinate { x: 11.5884858, y: 48.1700887 })] +/// vec![Point(Coord { x: 11.5884858, y: 48.1700887 })] /// ); /// ``` pub trait Forward diff --git a/src/opencage.rs b/src/opencage.rs index 917027b..d0fa27e 100644 --- a/src/opencage.rs +++ b/src/opencage.rs @@ -24,8 +24,6 @@ //! // "Carrer de Calatrava, 68, 08017 Barcelone, Espagne" //! println!("{:?}", res.unwrap()); //! ``` -use crate::chrono::naive::serde::ts_seconds::deserialize as from_ts; -use crate::chrono::NaiveDateTime; use crate::DeserializeOwned; use crate::GeocodingError; use crate::InputBounds; @@ -608,8 +606,20 @@ pub struct Status { #[derive(Debug, Serialize, Deserialize)] pub struct Timestamp { pub created_http: String, - #[serde(deserialize_with = "from_ts")] - pub created_unix: NaiveDateTime, + pub created_unix: UnixTime, +} + +/// Primitive unix timestamp +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +pub struct UnixTime(i64); + +impl UnixTime { + pub const fn as_seconds(self) -> i64 { + self.0 + } + pub const fn from_seconds(seconds: i64) -> Self { + Self(seconds) + } } /// Bounding-box metadata @@ -625,8 +635,7 @@ where #[cfg(test)] mod test { use super::*; - #[allow(deprecated)] - use crate::Coordinate; + use crate::Coord; #[test] fn reverse_test() { @@ -658,7 +667,7 @@ mod test { let res = oc.forward(&address); assert_eq!( res.unwrap(), - vec![Point(Coordinate { + vec![Point(Coord { x: 11.5884858, y: 48.1700887 })]