in lib/errors.go [59:89]
func nodeID(err error) (id int64, ok bool) {
if err == nil {
return 0, false
}
type nodeIDer interface {
NodeID() int64
}
for {
if node, ok := err.(nodeIDer); ok {
return node.NodeID(), true
}
switch x := err.(type) {
case interface{ Unwrap() error }:
err = x.Unwrap()
if err == nil {
return 0, false
}
case interface{ Unwrap() []error }:
for _, err := range x.Unwrap() {
if node, ok := err.(nodeIDer); ok {
return node.NodeID(), true
}
}
return 0, false
default:
return 0, false
}
}
}