mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-12 07:55:07 +08:00
41 lines
1003 B
Go
41 lines
1003 B
Go
package record
|
|
|
|
import (
|
|
"errors"
|
|
|
|
key "github.com/ipfs/go-ipfs/blocks/key"
|
|
path "github.com/ipfs/go-ipfs/path"
|
|
)
|
|
|
|
// A SelectorFunc selects the best value for the given key from
|
|
// a slice of possible values and returns the index of the chosen one
|
|
type SelectorFunc func(key.Key, [][]byte) (int, error)
|
|
|
|
type Selector map[string]SelectorFunc
|
|
|
|
func (s Selector) BestRecord(k key.Key, recs [][]byte) (int, error) {
|
|
if len(recs) == 0 {
|
|
return 0, errors.New("no records given!")
|
|
}
|
|
|
|
parts := path.SplitList(string(k))
|
|
if len(parts) < 3 {
|
|
log.Infof("Record key does not have selectorfunc: %s", k)
|
|
return 0, errors.New("record key does not have selectorfunc")
|
|
}
|
|
|
|
sel, ok := s[parts[1]]
|
|
if !ok {
|
|
log.Infof("Unrecognized key prefix: %s", parts[1])
|
|
return 0, ErrInvalidRecordType
|
|
}
|
|
|
|
return sel(k, recs)
|
|
}
|
|
|
|
// PublicKeySelector just selects the first entry.
|
|
// All valid public key records will be equivalent.
|
|
func PublicKeySelector(k key.Key, vals [][]byte) (int, error) {
|
|
return 0, nil
|
|
}
|