github.com/Tri-stone/burrow@v0.25.0/execution/state/names.go (about) 1 package state 2 3 import ( 4 "fmt" 5 6 "github.com/hyperledger/burrow/execution/names" 7 ) 8 9 var _ names.IterableReader = &State{} 10 11 func (s *ReadState) GetName(name string) (*names.Entry, error) { 12 tree, err := s.Forest.Reader(keys.Name.Prefix()) 13 if err != nil { 14 return nil, err 15 } 16 entryBytes := tree.Get(keys.Name.KeyNoPrefix(name)) 17 if entryBytes == nil { 18 return nil, nil 19 } 20 21 return names.DecodeEntry(entryBytes) 22 } 23 24 func (ws *writeState) UpdateName(entry *names.Entry) error { 25 tree, err := ws.forest.Writer(keys.Name.Prefix()) 26 if err != nil { 27 return err 28 } 29 bs, err := entry.Encode() 30 if err != nil { 31 return err 32 } 33 tree.Set(keys.Name.KeyNoPrefix(entry.Name), bs) 34 return nil 35 } 36 37 func (ws *writeState) RemoveName(name string) error { 38 tree, err := ws.forest.Writer(keys.Name.Prefix()) 39 if err != nil { 40 return err 41 } 42 tree.Delete(keys.Name.KeyNoPrefix(name)) 43 return nil 44 } 45 46 func (s *ReadState) IterateNames(consumer func(*names.Entry) error) error { 47 tree, err := s.Forest.Reader(keys.Name.Prefix()) 48 if err != nil { 49 return err 50 } 51 return tree.Iterate(nil, nil, true, func(key []byte, value []byte) error { 52 entry, err := names.DecodeEntry(value) 53 if err != nil { 54 return fmt.Errorf("State.IterateNames() could not iterate over names: %v", err) 55 } 56 return consumer(entry) 57 }) 58 }