Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions examples/lookup.zig
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ pub fn main() !void {
defer _ = gpa.detectLeaks();

var db = try maxminddb.Reader.open(allocator, db_path, max_db_size);
defer db.close();
defer db.close(allocator);

// Note, for better performance use arena allocator and reset it after calling lookup().
// You won't need to call city.deinit() in that case.
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
const city = try db.lookup(maxminddb.geoip2.City, &ip);
const city = try db.lookup(allocator, maxminddb.geoip2.City, &ip);
defer city.deinit();

var it = city.country.names.?.iterator();
Expand Down
6 changes: 3 additions & 3 deletions examples/within.zig
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ pub fn main() !void {
const allocator = gpa.allocator();
defer _ = gpa.detectLeaks();

var db = try maxminddb.Reader.open_mmap(allocator, db_path);
defer db.close();
var db = try maxminddb.Reader.mmap(allocator, db_path);
defer db.unmap();

const network = maxminddb.Network{
.ip = try std.net.Address.parseIp("0.0.0.0", 0),
};
var it = try db.within(maxminddb.geolite2.City, network);
var it = try db.within(allocator, maxminddb.geolite2.City, network);
defer it.deinit();

var n: usize = 0;
Expand Down
89 changes: 45 additions & 44 deletions src/maxminddb.zig
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,20 @@ fn expectEqualMaps(
}
}

const allocator = std.testing.allocator;
const expectEqual = std.testing.expectEqual;
const expectEqualStrings = std.testing.expectEqualStrings;
const expectEqualDeep = std.testing.expectEqualDeep;

test "GeoLite2 Country" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoLite2-Country-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("89.160.20.128", 0);
const got = try db.lookup(geolite2.Country, &ip);
const got = try db.lookup(allocator, geolite2.Country, &ip);
defer got.deinit();

try expectEqualStrings("EU", got.continent.code);
Expand Down Expand Up @@ -77,14 +78,14 @@ test "GeoLite2 Country" {
}

test "GeoLite2 City" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoLite2-City-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("89.160.20.128", 0);
const got = try db.lookup(geolite2.City, &ip);
const got = try db.lookup(allocator, geolite2.City, &ip);
defer got.deinit();

try expectEqual(2694762, got.city.geoname_id);
Expand Down Expand Up @@ -146,14 +147,14 @@ test "GeoLite2 City" {
}

test "GeoLite2 ASN" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoLite2-ASN-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("89.160.20.128", 0);
const got = try db.lookup(geolite2.ASN, &ip);
const got = try db.lookup(allocator, geolite2.ASN, &ip);

const want = geolite2.ASN{
.autonomous_system_number = 29518,
Expand All @@ -163,14 +164,14 @@ test "GeoLite2 ASN" {
}

test "GeoIP2 Country" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-Country-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("89.160.20.128", 0);
const got = try db.lookup(geoip2.Country, &ip);
const got = try db.lookup(allocator, geoip2.Country, &ip);
defer got.deinit();

try expectEqualStrings("EU", got.continent.code);
Expand Down Expand Up @@ -210,14 +211,14 @@ test "GeoIP2 Country" {
}

test "GeoIP2 City" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-City-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("89.160.20.128", 0);
const got = try db.lookup(geoip2.City, &ip);
const got = try db.lookup(allocator, geoip2.City, &ip);
defer got.deinit();

try expectEqual(2694762, got.city.geoname_id);
Expand Down Expand Up @@ -286,14 +287,14 @@ test "GeoIP2 City" {
}

test "GeoIP2 Enterprise" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-Enterprise-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("74.209.24.0", 0);
const got = try db.lookup(geoip2.Enterprise, &ip);
const got = try db.lookup(allocator, geoip2.Enterprise, &ip);
defer got.deinit();

try expectEqual(11, got.city.confidence);
Expand Down Expand Up @@ -380,14 +381,14 @@ test "GeoIP2 Enterprise" {
}

test "GeoIP2 ISP" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-ISP-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("89.160.20.112", 0);
const got = try db.lookup(geoip2.ISP, &ip);
const got = try db.lookup(allocator, geoip2.ISP, &ip);

const want = geoip2.ISP{
.autonomous_system_number = 29518,
Expand All @@ -399,14 +400,14 @@ test "GeoIP2 ISP" {
}

test "GeoIP2 Connection-Type" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-Connection-Type-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("96.1.20.112", 0);
const got = try db.lookup(geoip2.ConnectionType, &ip);
const got = try db.lookup(allocator, geoip2.ConnectionType, &ip);

const want = geoip2.ConnectionType{
.connection_type = "Cable/DSL",
Expand All @@ -415,14 +416,14 @@ test "GeoIP2 Connection-Type" {
}

test "GeoIP2 Anonymous-IP" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-Anonymous-IP-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("81.2.69.0", 0);
const got = try db.lookup(geoip2.AnonymousIP, &ip);
const got = try db.lookup(allocator, geoip2.AnonymousIP, &ip);

const want = geoip2.AnonymousIP{
.is_anonymous = true,
Expand All @@ -436,14 +437,14 @@ test "GeoIP2 Anonymous-IP" {
}

test "GeoIP2 DensityIncome" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-DensityIncome-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("5.83.124.123", 0);
const got = try db.lookup(geoip2.DensityIncome, &ip);
const got = try db.lookup(allocator, geoip2.DensityIncome, &ip);

const want = geoip2.DensityIncome{
.average_income = 32323,
Expand All @@ -453,14 +454,14 @@ test "GeoIP2 DensityIncome" {
}

test "GeoIP2 Domain" {
var db = try Reader.open_mmap(
std.testing.allocator,
var db = try Reader.mmap(
allocator,
"test-data/test-data/GeoIP2-Domain-Test.mmdb",
);
defer db.close();
defer db.unmap();

const ip = try std.net.Address.parseIp("66.92.80.123", 0);
const got = try db.lookup(geoip2.Domain, &ip);
const got = try db.lookup(allocator, geoip2.Domain, &ip);

const want = geoip2.Domain{
.domain = "speakeasy.net",
Expand Down
Loading