github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/teams/storage/std.go (about) 1 package storage 2 3 import ( 4 "fmt" 5 6 "github.com/keybase/client/go/libkb" 7 "github.com/keybase/client/go/protocol/keybase1" 8 ) 9 10 // Storage stores TeamData's on memory and disk. Threadsafe. For the standard loader, 11 // which does a complete but slower load. Compare to FTLStorage which stores the 12 // Fast-loaded team state. 13 type Storage struct { 14 *storageGeneric 15 } 16 17 // Increment to invalidate the disk cache. 18 const diskStorageVersion = 12 19 const memCacheLRUSize = 200 20 21 type DiskStorageItem struct { 22 Version int `codec:"V"` 23 State *keybase1.TeamData `codec:"S"` 24 } 25 26 var _ teamDataGeneric = (*keybase1.TeamData)(nil) 27 var _ diskItemGeneric = (*DiskStorageItem)(nil) 28 29 func (d *DiskStorageItem) version() int { 30 return d.Version 31 } 32 func (d *DiskStorageItem) value() teamDataGeneric { 33 return d.State 34 } 35 func (d *DiskStorageItem) setVersion(i int) { 36 d.Version = i 37 } 38 func (d *DiskStorageItem) setValue(v teamDataGeneric) error { 39 typed, ok := v.(*keybase1.TeamData) 40 if !ok { 41 return fmt.Errorf("teams.Storage#Put: Bad object for setValue; got type %T", v) 42 } 43 d.State = typed 44 return nil 45 } 46 47 func NewStorage(g *libkb.GlobalContext) *Storage { 48 s := newStorageGeneric(g, memCacheLRUSize, diskStorageVersion, libkb.DBSlowTeamsAlias, libkb.EncryptionReasonTeamsLocalStorage, "slow", func() diskItemGeneric { return &DiskStorageItem{} }) 49 return &Storage{s} 50 } 51 52 func (s *Storage) Put(mctx libkb.MetaContext, state *keybase1.TeamData) { 53 s.storageGeneric.put(mctx, state) 54 } 55 56 // Get can return nil and no error. 57 func (s *Storage) Get(mctx libkb.MetaContext, teamID keybase1.TeamID, public bool) (data *keybase1.TeamData, frozen bool, tombstoned bool) { 58 vp := s.storageGeneric.get(mctx, teamID, public) 59 if vp == nil { 60 return nil, false, false 61 } 62 ret, ok := vp.(*keybase1.TeamData) 63 if !ok { 64 mctx.Debug("teams.Storage#Get cast error: %T is wrong type", vp) 65 return nil, false, false 66 } 67 68 if ret.Frozen { 69 mctx.Debug("returning frozen team data") 70 } 71 if ret.Tombstoned { 72 mctx.Debug("returning tombstoned team data") 73 } 74 return ret, ret.Frozen, ret.Tombstoned 75 }