mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-20 11:58:39 +00:00
internal/deepprint: handle common map types specially
This commit is contained in:
parent
6ab2176dc7
commit
f858bfd61b
@ -16,10 +16,12 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
"tailscale.com/tailcfg"
|
"tailscale.com/tailcfg"
|
||||||
"tailscale.com/types/wgkey"
|
"tailscale.com/types/wgkey"
|
||||||
|
"tailscale.com/util/dnsname"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Hash(v ...interface{}) string {
|
func Hash(v ...interface{}) string {
|
||||||
@ -51,6 +53,8 @@ var (
|
|||||||
wgkeyKeyType = reflect.TypeOf(wgkey.Key{})
|
wgkeyKeyType = reflect.TypeOf(wgkey.Key{})
|
||||||
wgkeyPrivateType = reflect.TypeOf(wgkey.Private{})
|
wgkeyPrivateType = reflect.TypeOf(wgkey.Private{})
|
||||||
tailcfgDiscoKeyType = reflect.TypeOf(tailcfg.DiscoKey{})
|
tailcfgDiscoKeyType = reflect.TypeOf(tailcfg.DiscoKey{})
|
||||||
|
mapFQDNIPType = reflect.TypeOf(map[dnsname.FQDN][]netaddr.IP{})
|
||||||
|
mapFQDNIPPortType = reflect.TypeOf(map[dnsname.FQDN][]netaddr.IPPort{})
|
||||||
)
|
)
|
||||||
|
|
||||||
func print(w *bufio.Writer, v reflect.Value, visited map[uintptr]bool) {
|
func print(w *bufio.Writer, v reflect.Value, visited map[uintptr]bool) {
|
||||||
@ -116,6 +120,44 @@ func print(w *bufio.Writer, v reflect.Value, visited map[uintptr]bool) {
|
|||||||
w.Write(x[:])
|
w.Write(x[:])
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
case mapFQDNIPType:
|
||||||
|
x := v.Interface().(map[dnsname.FQDN][]netaddr.IP)
|
||||||
|
keys := make([]dnsname.FQDN, 0, len(x))
|
||||||
|
for k := range x {
|
||||||
|
keys = append(keys, k)
|
||||||
|
}
|
||||||
|
sort.Slice(keys, func(i, j int) bool { return string(keys[i]) < string(keys[j]) })
|
||||||
|
fmt.Fprintf(w, "map[%d]{\n", len(x))
|
||||||
|
for _, k := range keys {
|
||||||
|
w.WriteString(string(k))
|
||||||
|
w.WriteString(": ")
|
||||||
|
for _, ip := range x[dnsname.FQDN(k)] {
|
||||||
|
b, _ := ip.MarshalText()
|
||||||
|
w.Write(b)
|
||||||
|
w.WriteString(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.WriteString("}\n")
|
||||||
|
return
|
||||||
|
case mapFQDNIPPortType:
|
||||||
|
x := v.Interface().(map[dnsname.FQDN][]netaddr.IPPort)
|
||||||
|
keys := make([]dnsname.FQDN, 0, len(x))
|
||||||
|
for k := range x {
|
||||||
|
keys = append(keys, k)
|
||||||
|
}
|
||||||
|
sort.Slice(keys, func(i, j int) bool { return string(keys[i]) < string(keys[j]) })
|
||||||
|
fmt.Fprintf(w, "map[%d]{\n", len(x))
|
||||||
|
for _, k := range keys {
|
||||||
|
w.WriteString(string(k))
|
||||||
|
w.WriteString(": ")
|
||||||
|
for _, ipp := range x[dnsname.FQDN(k)] {
|
||||||
|
b, _ := ipp.MarshalText()
|
||||||
|
w.Write(b)
|
||||||
|
w.WriteString(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.WriteString("}\n")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user