| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package transientstorageimpl
- //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
- import (
- "context"
- "github.com/v2fly/v2ray-core/v5/features/extension/storage"
- "strings"
- "sync"
- )
- func NewScopedTransientStorageImpl() storage.ScopedTransientStorage {
- return &scopedTransientStorageImpl{scopes: map[string]storage.ScopedTransientStorage{}, values: map[string]interface{}{}}
- }
- type scopedTransientStorageImpl struct {
- access sync.Mutex
- scopes map[string]storage.ScopedTransientStorage
- values map[string]interface{}
- }
- func (s *scopedTransientStorageImpl) ScopedTransientStorage() {
- panic("implement me")
- }
- func (s *scopedTransientStorageImpl) Put(ctx context.Context, key string, value interface{}) error {
- s.access.Lock()
- defer s.access.Unlock()
- s.values[key] = value
- return nil
- }
- func (s *scopedTransientStorageImpl) Get(ctx context.Context, key string) (interface{}, error) {
- s.access.Lock()
- defer s.access.Unlock()
- sw, ok := s.values[key]
- if !ok {
- return nil, newError("unable to find ")
- }
- return sw, nil
- }
- func (s *scopedTransientStorageImpl) List(ctx context.Context, keyPrefix string) ([]string, error) {
- s.access.Lock()
- defer s.access.Unlock()
- var ret []string
- for key, _ := range s.values {
- if strings.HasPrefix(key, keyPrefix) {
- ret = append(ret, key)
- }
- }
- return ret, nil
- }
- func (s *scopedTransientStorageImpl) Clear(ctx context.Context) {
- s.access.Lock()
- defer s.access.Unlock()
- s.values = map[string]interface{}{}
- }
- func (s *scopedTransientStorageImpl) NarrowScope(ctx context.Context, key string) (storage.ScopedTransientStorage, error) {
- s.access.Lock()
- defer s.access.Unlock()
- sw, ok := s.scopes[key]
- if !ok {
- scope := NewScopedTransientStorageImpl()
- s.scopes[key] = scope
- return scope, nil
- }
- return sw, nil
- }
- func (s *scopedTransientStorageImpl) DropScope(ctx context.Context, key string) error {
- s.access.Lock()
- defer s.access.Unlock()
- delete(s.scopes, key)
- return nil
- }
|