From 0cc1ec6b9ec48426ad23978af7835dfdaa3b57be Mon Sep 17 00:00:00 2001 From: Didier Chagniot Date: Sun, 17 Dec 2023 16:54:26 +0100 Subject: [PATCH 1/2] json schema added through opt schemars crate --- Cargo.toml | 2 ++ src/maxminddb/geoip2.rs | 40 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8c2d62a7..7c99ea21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ edition = "2021" default = [] mmap = ["memmap2"] unsafe-str-decode = [] +schema = ["schemars"] [lib] name ="maxminddb" @@ -28,6 +29,7 @@ log = "0.4" serde = { version = "1.0", features = ["derive"] } memchr = "2.4" memmap2 = { version = "0.9.0", optional = true } +schemars = { version = "0.8.16",optional = true } [dev-dependencies] env_logger = "0.10" diff --git a/src/maxminddb/geoip2.rs b/src/maxminddb/geoip2.rs index 03123aa8..c1ff0142 100644 --- a/src/maxminddb/geoip2.rs +++ b/src/maxminddb/geoip2.rs @@ -1,7 +1,10 @@ use serde::{Deserialize, Serialize}; +#[cfg(feature = "schema")] +use schemars::JsonSchema; /// GeoIP2 Country record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Country<'a> { #[serde(borrow)] pub continent: Option>, @@ -13,6 +16,7 @@ pub struct Country<'a> { /// GeoIP2 City record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct City<'a> { #[serde(borrow)] pub city: Option>, @@ -28,6 +32,7 @@ pub struct City<'a> { /// GeoIP2 Enterprise record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Enterprise<'a> { #[serde(borrow)] pub city: Option>, @@ -43,6 +48,7 @@ pub struct Enterprise<'a> { /// GeoIP2 ISP record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Isp<'a> { pub autonomous_system_number: Option, pub autonomous_system_organization: Option<&'a str>, @@ -54,12 +60,14 @@ pub struct Isp<'a> { /// GeoIP2 Connection-Type record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct ConnectionType<'a> { pub connection_type: Option<&'a str>, } /// GeoIP2 Anonymous Ip record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct AnonymousIp { pub is_anonymous: Option, pub is_anonymous_vpn: Option, @@ -71,6 +79,7 @@ pub struct AnonymousIp { /// GeoIP2 DensityIncome record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct DensityIncome { pub average_income: Option, pub population_density: Option, @@ -78,12 +87,14 @@ pub struct DensityIncome { /// GeoIP2 Domain record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Domain<'a> { pub domain: Option<&'a str>, } /// GeoIP2 Asn record #[derive(Deserialize, Serialize, Clone, Debug)] +#[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Asn<'a> { pub autonomous_system_number: Option, pub autonomous_system_organization: Option<&'a str>, @@ -93,8 +104,12 @@ pub struct Asn<'a> { pub mod country { use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; - + #[cfg(feature = "schema")] + use schemars::JsonSchema; + + #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Continent<'a> { pub code: Option<&'a str>, pub geoname_id: Option, @@ -102,7 +117,8 @@ pub mod country { } #[derive(Deserialize, Serialize, Clone, Debug)] - pub struct Country<'a> { + #[cfg_attr(feature = "schema", derive(JsonSchema))] +pub struct Country<'a> { pub geoname_id: Option, pub is_in_european_union: Option, pub iso_code: Option<&'a str>, @@ -110,6 +126,7 @@ pub mod country { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct RepresentedCountry<'a> { pub geoname_id: Option, pub is_in_european_union: Option, @@ -120,6 +137,7 @@ pub mod country { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Traits { pub is_anonymous_proxy: Option, pub is_satellite_provider: Option, @@ -130,10 +148,13 @@ pub mod country { pub mod city { use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; - + #[cfg(feature = "schema")] + use schemars::JsonSchema; + pub use super::country::{Continent, Country, RepresentedCountry, Traits}; #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct City<'a> { pub geoname_id: Option, #[serde(borrow)] @@ -141,6 +162,7 @@ pub mod city { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Location<'a> { pub accuracy_radius: Option, pub latitude: Option, @@ -150,11 +172,13 @@ pub mod city { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Postal<'a> { pub code: Option<&'a str>, } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Subdivision<'a> { pub geoname_id: Option, pub iso_code: Option<&'a str>, @@ -166,10 +190,13 @@ pub mod city { pub mod enterprise { use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; - + #[cfg(feature = "schema")] + use schemars::JsonSchema; + pub use super::country::{Continent, RepresentedCountry}; #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct City<'a> { pub confidence: Option, pub geoname_id: Option, @@ -178,6 +205,7 @@ pub mod enterprise { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Country<'a> { pub confidence: Option, pub geoname_id: Option, @@ -187,6 +215,7 @@ pub mod enterprise { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Location<'a> { pub accuracy_radius: Option, pub latitude: Option, @@ -196,12 +225,14 @@ pub mod enterprise { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Postal<'a> { pub code: Option<&'a str>, pub confidence: Option, } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Subdivision<'a> { pub confidence: Option, pub geoname_id: Option, @@ -210,6 +241,7 @@ pub mod enterprise { } #[derive(Deserialize, Serialize, Clone, Debug)] + #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Traits<'a> { pub autonomous_system_number: Option, pub autonomous_system_organization: Option<&'a str>, From 4c9d96290f7920df025826e6902d778b9e4a8fd6 Mon Sep 17 00:00:00 2001 From: Didier Chagniot Date: Wed, 10 Jan 2024 19:06:52 +0100 Subject: [PATCH 2/2] fix cargo fmt --all --check --- src/maxminddb/geoip2.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/maxminddb/geoip2.rs b/src/maxminddb/geoip2.rs index c1ff0142..a2544f5e 100644 --- a/src/maxminddb/geoip2.rs +++ b/src/maxminddb/geoip2.rs @@ -1,6 +1,6 @@ -use serde::{Deserialize, Serialize}; #[cfg(feature = "schema")] use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; /// GeoIP2 Country record #[derive(Deserialize, Serialize, Clone, Debug)] @@ -102,12 +102,11 @@ pub struct Asn<'a> { /// Country model structs pub mod country { - use serde::{Deserialize, Serialize}; - use std::collections::BTreeMap; #[cfg(feature = "schema")] use schemars::JsonSchema; - - + use serde::{Deserialize, Serialize}; + use std::collections::BTreeMap; + #[derive(Deserialize, Serialize, Clone, Debug)] #[cfg_attr(feature = "schema", derive(JsonSchema))] pub struct Continent<'a> { @@ -118,7 +117,7 @@ pub mod country { #[derive(Deserialize, Serialize, Clone, Debug)] #[cfg_attr(feature = "schema", derive(JsonSchema))] -pub struct Country<'a> { + pub struct Country<'a> { pub geoname_id: Option, pub is_in_european_union: Option, pub iso_code: Option<&'a str>, @@ -146,11 +145,11 @@ pub struct Country<'a> { /// Country model structs pub mod city { - use serde::{Deserialize, Serialize}; - use std::collections::BTreeMap; #[cfg(feature = "schema")] use schemars::JsonSchema; - + use serde::{Deserialize, Serialize}; + use std::collections::BTreeMap; + pub use super::country::{Continent, Country, RepresentedCountry, Traits}; #[derive(Deserialize, Serialize, Clone, Debug)] @@ -188,11 +187,11 @@ pub mod city { /// Enterprise model structs pub mod enterprise { - use serde::{Deserialize, Serialize}; - use std::collections::BTreeMap; #[cfg(feature = "schema")] use schemars::JsonSchema; - + use serde::{Deserialize, Serialize}; + use std::collections::BTreeMap; + pub use super::country::{Continent, RepresentedCountry}; #[derive(Deserialize, Serialize, Clone, Debug)]