[x] Replace net.IP and *net.IPNet with netip.Addr and netip.Prefix
[ ] Update naming and docs to more closely align with net/netip
[x] Make SkipAliasedNetworks the default when traversing a tree. Almost no one wants the IPv4 information to be repeated in several spots. We will need to deal with https://github.com/oschwald/maxminddb-golang/issues/79 when doing this.
[ ] Replace LookupOffset with method that returns a struct rather than a uintptr. The returned value would have a Decode(any) method to replace the current use of (*Reader).Decode. Beyond the type safety and reducing the risk of a panic due to programmer error, this would provide the ability to do things like a DecodePath(result any, path ...any) that could avoid most of the use of reflection and creating a struct to decode to when looking up a single value.
[ ] (*Reader) Decode is removed. See above.
[ ] After the above changes, reexamine the Lookup* methods. Do we really need Lookup, LookupNetwork, and LookupOffset (or whatever the above replacement will be called)? Maybe the LookupOffset replacement method from above could replace all of them, although we would have to think about how error handling would work so as not to make it more verbose (e.g., defer returning error from the tree lookup).
[ ] Maybe rename FromBytes to OpenBytes or something as many people seem to overlook it.
[ ] Move decoder to a separate package to make PRs like this one more viable without creating a mess of the maxminddb package.
[ ] Maybe replace the existing Networks* traversal with an iterator.
net.IP
and*net.IPNet
withnetip.Addr
andnetip.Prefix
net/netip
SkipAliasedNetworks
the default when traversing a tree. Almost no one wants the IPv4 information to be repeated in several spots. We will need to deal with https://github.com/oschwald/maxminddb-golang/issues/79 when doing this.LookupOffset
with method that returns a struct rather than auintptr
. The returned value would have aDecode(any)
method to replace the current use of(*Reader).Decode
. Beyond the type safety and reducing the risk of a panic due to programmer error, this would provide the ability to do things like aDecodePath(result any, path ...any)
that could avoid most of the use of reflection and creating a struct to decode to when looking up a single value.(*Reader) Decode
is removed. See above.Lookup*
methods. Do we really needLookup
,LookupNetwork
, andLookupOffset
(or whatever the above replacement will be called)? Maybe theLookupOffset
replacement method from above could replace all of them, although we would have to think about how error handling would work so as not to make it more verbose (e.g., defer returning error from the tree lookup).FromBytes
toOpenBytes
or something as many people seem to overlook it.maxminddb
package.Networks*
traversal with an iterator.