summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/schema/scan.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema/scan.go')
-rw-r--r--vendor/github.com/uptrace/bun/schema/scan.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/schema/scan.go b/vendor/github.com/uptrace/bun/schema/scan.go
index 9db46cd6f..0c4f8a824 100644
--- a/vendor/github.com/uptrace/bun/schema/scan.go
+++ b/vendor/github.com/uptrace/bun/schema/scan.go
@@ -5,6 +5,7 @@ import (
"database/sql"
"fmt"
"net"
+ "net/netip"
"reflect"
"strconv"
"strings"
@@ -102,6 +103,10 @@ func scanner(typ reflect.Type) ScannerFunc {
return scanIP
case ipNetType:
return scanIPNet
+ case netipAddrType:
+ return scanNetIpAddr
+ case netipPrefixType:
+ return scanNetIpPrefix
case jsonRawMessageType:
return scanBytes
}
@@ -413,6 +418,48 @@ func scanIPNet(dest reflect.Value, src interface{}) error {
return nil
}
+func scanNetIpAddr(dest reflect.Value, src interface{}) error {
+ if src == nil {
+ return scanNull(dest)
+ }
+
+ b, err := toBytes(src)
+ if err != nil {
+ return err
+ }
+
+ val, _ := netip.ParseAddr(internal.String(b))
+ if !val.IsValid() {
+ return fmt.Errorf("bun: invalid ip: %q", b)
+ }
+
+ ptr := dest.Addr().Interface().(*netip.Addr)
+ *ptr = val
+
+ return nil
+}
+
+func scanNetIpPrefix(dest reflect.Value, src interface{}) error {
+ if src == nil {
+ return scanNull(dest)
+ }
+
+ b, err := toBytes(src)
+ if err != nil {
+ return err
+ }
+
+ val, _ := netip.ParsePrefix(internal.String(b))
+ if !val.IsValid() {
+ return fmt.Errorf("bun: invalid prefix: %q", b)
+ }
+
+ ptr := dest.Addr().Interface().(*netip.Prefix)
+ *ptr = val
+
+ return nil
+}
+
func addrScanner(fn ScannerFunc) ScannerFunc {
return func(dest reflect.Value, src interface{}) error {
if !dest.CanAddr() {