func nodeID()

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
		}
	}
}