ip_lookup/
api.rs

1/* src/api.rs */
2
3use crate::lookup::{
4    lookup_with_ipapi,
5    lookup_with_ipinfo,
6    lookup_with_ipsb,
7    lookup_with_ipapiio,
8    lookup_with_apipcc,
9    lookup_with_ipapiis,
10    lookup_with_geolocated,
11    lookup_with_iplocationapi,
12    LookupResult,
13};
14
15#[derive(Debug, Copy, Clone)]
16pub enum LookupProvider {
17    IpApi,
18    IpInfo,
19    IpSb,
20    IpApiIo,
21    ApipCc,
22    IpapiIs,
23    Geolocated,
24    IpLocationApi,
25}
26
27pub fn lookup(provider: LookupProvider) -> Option<LookupResult> {
28    match provider {
29        LookupProvider::IpApi => lookup_with_ipapi(),
30        LookupProvider::IpInfo => lookup_with_ipinfo(),
31        LookupProvider::IpSb => lookup_with_ipsb(),
32        LookupProvider::IpApiIo => lookup_with_ipapiio(),
33        LookupProvider::ApipCc => lookup_with_apipcc(),
34        LookupProvider::IpapiIs => lookup_with_ipapiis(),
35        LookupProvider::Geolocated => lookup_with_geolocated(),
36        LookupProvider::IpLocationApi => lookup_with_iplocationapi(),
37    }
38}
39
40impl LookupProvider {
41    pub fn all() -> &'static [LookupProvider] {
42        &[
43            LookupProvider::IpApi,
44            LookupProvider::IpInfo,
45            LookupProvider::IpSb,
46            LookupProvider::IpApiIo,
47            LookupProvider::ApipCc,
48            LookupProvider::IpapiIs,
49            LookupProvider::Geolocated,
50            LookupProvider::IpLocationApi,
51        ]
52    }
53}