diff --git a/CHANGES.md b/CHANGES.md index b83c526..a60bc0f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,30 @@ # Changes +## unreleased + +- Remove unmaintained `chrono` dependency + +### Breaking Changes + +Due to security issues caused by the unmaintained `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.into_seconds()); +``` + ## 0.4.0 - Switch GeoAdmin API to WGS84 diff --git a/Cargo.toml b/Cargo.toml index 6f1a7b9..05ddd0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,6 @@ 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 addd8ae..4793e57 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -27,7 +27,6 @@ static UA_STRING: &str = "Rust-Geocoding"; -use chrono; pub use geo_types::{Coordinate, Point}; use num_traits::Float; use reqwest::blocking::Client; diff --git a/src/opencage.rs b/src/opencage.rs index 87c2a80..e4a2951 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 into_seconds(self) -> i64 { + self.0 + } + pub const fn from_seconds(seconds: i64) -> Self { + Self(seconds) + } } /// Bounding-box metadata