Key and answer a ledger index by mesh-sdk's IndexKey and IndexEntry, the one shape the owner's watcher also writes (issue 1966 T3)
This commit is contained in:
@@ -16,13 +16,19 @@ import (
|
||||
// 0597 §4).
|
||||
type Index interface {
|
||||
// Entries is the entries whose key a pattern names (`*` one name, `>` the rest; empty is every key), at most limit
|
||||
// (every one when 0).
|
||||
Entries(pattern string, limit int) ([]buscalls.IndexEntry, error)
|
||||
// (every one when 0), each as the bucket holds it.
|
||||
Entries(pattern string, limit int) ([]Indexed, error)
|
||||
// Put writes one entry; Delete removes one.
|
||||
Put(key string, value []byte) error
|
||||
Delete(key string) error
|
||||
}
|
||||
|
||||
// Indexed is one key of an index's bucket and its value, a buscalls.IndexEntry as JSON.
|
||||
type Indexed struct {
|
||||
Key string
|
||||
Value []byte
|
||||
}
|
||||
|
||||
// Watcher is a state bucket that hands each instance's record as it is and as it changes, under a key pattern.
|
||||
type Watcher interface {
|
||||
Watch(pattern string, deliver func(key string, value []byte, current bool) error) (func(), error)
|
||||
@@ -144,12 +150,17 @@ func (l *Ledger) Query(r buscalls.QueryRequest) (buscalls.QueryAnswer, error) {
|
||||
if err != nil {
|
||||
return buscalls.QueryAnswer{}, err
|
||||
}
|
||||
entries, err := ix.Entries(r.Key, r.Limit)
|
||||
held, err := ix.Entries(r.Key, r.Limit)
|
||||
if err != nil {
|
||||
return buscalls.QueryAnswer{}, err
|
||||
}
|
||||
if entries == nil {
|
||||
entries = []buscalls.IndexEntry{}
|
||||
entries := make([]buscalls.IndexEntry, 0, len(held))
|
||||
for _, h := range held {
|
||||
var e buscalls.IndexEntry
|
||||
if err := json.Unmarshal(h.Value, &e); err != nil {
|
||||
return buscalls.QueryAnswer{}, fmt.Errorf("the index %s's entry %s is not one: %w", r.Index, h.Key, err)
|
||||
}
|
||||
entries = append(entries, e)
|
||||
}
|
||||
return buscalls.QueryAnswer{Entries: entries}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user