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 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.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for IpGeoDb
impl RefUnwindSafe for IpGeoDb
impl Send for IpGeoDb
impl Sync for IpGeoDb
impl Unpin for IpGeoDb
impl UnsafeUnpin for IpGeoDb
impl UnwindSafe 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§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<V, F> ValueFormatter<&V> for F
impl<V, F> ValueFormatter<&V> for F
§fn format_value(writer: impl ValueWriter, value: &&V)
fn format_value(writer: impl ValueWriter, value: &&V)
value to writer§impl<V, F> ValueFormatter<Arc<V>> for F
impl<V, F> ValueFormatter<Arc<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Arc<V>)
fn format_value(writer: impl ValueWriter, value: &Arc<V>)
value to writer§impl<V, F> ValueFormatter<Box<V>> for F
impl<V, F> ValueFormatter<Box<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Box<V>)
fn format_value(writer: impl ValueWriter, value: &Box<V>)
value to writer§impl<V, F> ValueFormatter<Cow<'_, V>> for F
impl<V, F> ValueFormatter<Cow<'_, V>> for F
§fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
value to writer§impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
§fn format_value(writer: impl ValueWriter, value: &Option<V>)
fn format_value(writer: impl ValueWriter, value: &Option<V>)
value to writer