v0.1.0 #1
@@ -0,0 +1,78 @@
|
|||||||
|
package geoip2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"net/netip"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ErrNotFound is returned when the database does not contain the IP address.
|
||||||
|
const ErrNotFound = "not found"
|
||||||
|
|
||||||
|
// Info is a structure that contains information about the IP address.
|
||||||
|
type Info struct {
|
||||||
|
// IP is the IP address.
|
||||||
|
IP netip.Addr
|
||||||
|
// ISOCode is the ISO code of the country.
|
||||||
|
ISOCode string
|
||||||
|
// Continent is the continent.
|
||||||
|
Continent string
|
||||||
|
// Country is the country.
|
||||||
|
Country string
|
||||||
|
// City is the city.
|
||||||
|
City string
|
||||||
|
// CitySubdivisions is the list of subdivisions.
|
||||||
|
CitySubdivisions []string
|
||||||
|
// TimeZone is the time zone.
|
||||||
|
TimeZone string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToString returns a string representation of the Info structure.
|
||||||
|
func (i Info) ToString() string {
|
||||||
|
var data []string
|
||||||
|
|
||||||
|
if i.Continent != "" {
|
||||||
|
data = append(data, i.Continent)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.ISOCode != "" {
|
||||||
|
data = append(data, i.ISOCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.Country != "" {
|
||||||
|
data = append(data, i.Country)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(i.CitySubdivisions) > 0 {
|
||||||
|
data = append(data, strings.Join(i.CitySubdivisions, ", "))
|
||||||
|
}
|
||||||
|
|
||||||
|
if i.City != "" {
|
||||||
|
data = append(data, i.City)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("%s (%s) time zone: %s",
|
||||||
|
i.IP.String(),
|
||||||
|
strings.Join(data, "/"),
|
||||||
|
i.TimeZone,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GeoIP2 is an interface for geoip2.
|
||||||
|
type GeoIP2 interface {
|
||||||
|
Info(ip netip.Addr) (Info, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefreshableGeoIP2 is an interface for geoip2 with refresh and close functionality.
|
||||||
|
type RefreshableGeoIP2 interface {
|
||||||
|
GeoIP2
|
||||||
|
Refresh(ctx context.Context) error
|
||||||
|
Close() error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logger is an interface for logging.
|
||||||
|
type Logger interface {
|
||||||
|
// Error logs an error.
|
||||||
|
Error(err error)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user