package reality import ( "net" "github.com/oschwald/geoip2-golang" ) // GeoResolver performs GeoIP country lookups using a MaxMind MMDB file. type GeoResolver struct { reader *geoip2.Reader } // NewGeoResolver opens an MMDB file for country lookups. // Returns nil resolver (not an error) if path is empty — callers get "N/A" for all lookups. func NewGeoResolver(mmdbPath string) (*GeoResolver, error) { if mmdbPath == "" { return nil, nil } reader, err := geoip2.Open(mmdbPath) if err != nil { return nil, err } return &GeoResolver{reader: reader}, nil } // Lookup returns the ISO country code for an IP, or "N/A" if unavailable. func (g *GeoResolver) Lookup(ip net.IP) string { if g == nil || g.reader == nil { return "N/A" } record, err := g.reader.Country(ip) if err != nil || record.Country.IsoCode == "" { return "N/A" } return record.Country.IsoCode } // Close releases the MMDB reader resources. func (g *GeoResolver) Close() { if g != nil && g.reader != nil { g.reader.Close() } }