Files
mila/storage/memory.go

50 lines
772 B
Go

package storage
import (
"context"
"sync"
"gitea.unprism.ru/KRBL/mila/protocol"
)
type MemoryStore struct {
mu sync.RWMutex
state protocol.ContentState
ready bool
}
func NewMemoryStore() *MemoryStore {
return &MemoryStore{}
}
func (s *MemoryStore) Get(ctx context.Context) (protocol.ContentState, error) {
select {
case <-ctx.Done():
return protocol.ContentState{}, ctx.Err()
default:
}
s.mu.RLock()
defer s.mu.RUnlock()
if !s.ready {
return protocol.ContentState{}, protocol.ErrNotReady
}
return s.state, nil
}
func (s *MemoryStore) Set(ctx context.Context, state protocol.ContentState) error {
select {
case <-ctx.Done():
return ctx.Err()
default:
}
s.mu.Lock()
defer s.mu.Unlock()
s.state = state
s.ready = true
return nil
}