Struct IpGeoDb
pub struct IpGeoDb { /* private fields */ }net only.Expand description
A collection of labelled IP geolocation sources, queried together.
Cheap to clone and safe to query concurrently, so it suits shared application state.
Implementations§
§impl IpGeoDb
impl IpGeoDb
pub fn builder() -> IpGeoDbBuilder
pub fn builder() -> IpGeoDbBuilder
Start building an IpGeoDb.
pub fn attributions(&self) -> impl Iterator<Item = &'static str>
pub fn attributions(&self) -> impl Iterator<Item = &'static str>
The distinct attribution notices required by the loaded sources,
derived from each source’s label (e.g. a geolite2 source requires the
MaxMind GeoLite2 notice, an ip2location source the IP2Location LITE
notice). Sources whose label maps to no known provider contribute
nothing, so the result reflects only what is actually loaded.
The operator-assigned label is used rather than the database’s own
database_type metadata: some providers ship that field set to another
provider’s value (IP2Location’s MMDB reports GeoLite2-City), so it is
not a reliable signal of origin.
Yielded lazily and de-duplicated; .collect() if you need a slice.
pub fn lookup(&self, ip: IpAddr) -> Option<GeoLocation>
pub fn lookup(&self, ip: IpAddr) -> Option<GeoLocation>
Look up ip across every source and merge into a single
GeoLocation, earlier sources taking precedence. Returns None if
no source carries data for ip.
pub fn lookup_all(&self, ip: IpAddr) -> Vec<IpGeoSourceResult>
pub fn lookup_all(&self, ip: IpAddr) -> Vec<IpGeoSourceResult>
Look up ip in each source separately, returning the per-source
(merged-within-source) results in precedence order. Sources without
data for ip are omitted.
pub fn resolve(&self, ip: IpAddr) -> Option<IpGeoInfo>
pub fn resolve(&self, ip: IpAddr) -> Option<IpGeoInfo>
Resolve ip into an IpGeoInfo (the merged location plus the
per-source breakdown), or None if no source has data for it.
pub fn from_env() -> Result<Option<IpGeoDb>, GeoIpError>
pub fn from_env() -> Result<Option<IpGeoDb>, GeoIpError>
Build from the RAMA_IP_GEO_DB_ENV environment variable.
Returns Ok(None) when the variable is unset or empty.
§Errors
Returns GeoIpError if the value is malformed, set but not valid
UTF-8, or a configured file cannot be loaded.
pub fn from_env_positional(
config: &MmdbFileConfig,
) -> Result<Option<IpGeoDb>, GeoIpError>
pub fn from_env_positional( config: &MmdbFileConfig, ) -> Result<Option<IpGeoDb>, GeoIpError>
Self::from_env, reading each configured file through positional
reads with MmdbFileReader (configured by config) instead of
loading it into memory. Each file follows replacements of its path.
§Errors
Same as Self::from_env.
pub unsafe fn from_env_mmap() -> Result<Option<IpGeoDb>, GeoIpError>
Available on crate feature mmap only.
pub unsafe fn from_env_mmap() -> Result<Option<IpGeoDb>, GeoIpError>
mmap only.Self::from_env, memory-mapping each configured file through
MmdbReader::open_mmap instead of reading it into memory.
§Safety
Every file named by RAMA_IP_GEO_DB_ENV must meet the
MmdbReader::open_mmap # Safety contract for as long as the
returned database or any clone of it is alive.
§Errors
Same as Self::from_env.
pub fn parse_spec(spec: &str) -> Result<IpGeoDb, GeoIpError>
pub fn parse_spec(spec: &str) -> Result<IpGeoDb, GeoIpError>
Parse a configuration string of the form
label=file[+file...][;label=file[+file...]...].
; separates sources; + joins several files under one label (queried
and merged together). An entry without a label= prefix is labelled by
the first file’s stem.
§Errors
Returns GeoIpError::InvalidConfig for a malformed string, or
GeoIpError::Source if a configured file cannot be loaded.
pub fn parse_spec_positional(
spec: &str,
config: &MmdbFileConfig,
) -> Result<IpGeoDb, GeoIpError>
pub fn parse_spec_positional( spec: &str, config: &MmdbFileConfig, ) -> Result<IpGeoDb, GeoIpError>
Self::parse_spec, reading each configured file through positional
reads with MmdbFileReader (configured by config) instead of
loading it into memory. Each file follows replacements of its path.
§Errors
Same as Self::parse_spec.
pub unsafe fn parse_spec_mmap(spec: &str) -> Result<IpGeoDb, GeoIpError>
Available on crate feature mmap only.
pub unsafe fn parse_spec_mmap(spec: &str) -> Result<IpGeoDb, GeoIpError>
mmap only.Self::parse_spec, memory-mapping each configured file through
MmdbReader::open_mmap instead of reading it into memory.
§Safety
Every file named in spec must meet the MmdbReader::open_mmap
# Safety contract for as long as the returned database or any clone
of it is alive.
§Errors
Same as Self::parse_spec.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for IpGeoDb
impl !UnwindSafe for IpGeoDb
impl Forget for IpGeoDb
impl Freeze for IpGeoDb
impl Send for IpGeoDb
impl Sync for IpGeoDb
impl Unpin for IpGeoDb
impl UnsafeUnpin for IpGeoDb
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more