1use 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}