github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/p/demo/gnorkle/storage/simple/storage.gno (about) 1 package simple 2 3 import ( 4 "time" 5 6 "gno.land/p/demo/gnorkle/feed" 7 "gno.land/p/demo/gnorkle/storage" 8 ) 9 10 // Storage is simple, bounded storage for published feed values. 11 type Storage struct { 12 values []feed.Value 13 maxValues uint 14 } 15 16 // NewStorage creates a new Storage with the given maximum number of values. 17 // If maxValues is 0, the storage is bounded to a size of one. If this is not desirable, 18 // then don't provide a value of 0. 19 func NewStorage(maxValues uint) *Storage { 20 if maxValues == 0 { 21 maxValues = 1 22 } 23 24 return &Storage{ 25 maxValues: maxValues, 26 } 27 } 28 29 // Put adds a new value to the storage. If the storage is full, the oldest value 30 // is removed. If maxValues is 0, the storage is bounded to a size of one. 31 func (s *Storage) Put(value string) error { 32 if s == nil { 33 return storage.ErrUndefined 34 } 35 36 s.values = append(s.values, feed.Value{String: value, Time: time.Now()}) 37 if uint(len(s.values)) > s.maxValues { 38 s.values = s.values[1:] 39 } 40 41 return nil 42 } 43 44 // GetLatest returns the most recently added value, or an empty value if none exist. 45 func (s Storage) GetLatest() feed.Value { 46 if len(s.values) == 0 { 47 return feed.Value{} 48 } 49 50 return s.values[len(s.values)-1] 51 } 52 53 // GetHistory returns all values in the storage, from oldest to newest. 54 func (s Storage) GetHistory() []feed.Value { 55 return s.values 56 }