mod ip_info;
mod location;
mod user_agent;
pub use ip_info::{
Carrier, Company, CompanyType, Connection, ConnectionType, Currency, CurrencyFormat,
CurrencyFormatAffix, IpInfo, IpType, RequesterIpInfo, Security, TimeZone,
};
pub use location::{Continent, Country, Flag, Language, Location, Region};
pub use user_agent::{UserAgent, UserAgentDevice, UserAgentEngine, UserAgentOs, is_bot};
pub(crate) mod de {
use serde::{Deserialize, Deserializer};
pub(crate) fn null_default<'de, D, T>(deserializer: D) -> Result<T, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de> + Default,
{
Ok(Option::<T>::deserialize(deserializer)?.unwrap_or_default())
}
}