package cache

// MemoryNoTS provides a non-thread safe caching mechanism
type MemoryNoTS struct {
	// items holds the cache data
	items map[string]interface{}
}

// NewMemoryNoTS creates MemoryNoTS struct
func NewMemoryNoTS() *MemoryNoTS {
	return &MemoryNoTS{
		items: map[string]interface{}{},
	}
}

// Get returns a value of a given key if it exists
// and valid for the time being
func (r *MemoryNoTS) Get(key string) (interface{}, error) {
	value, ok := r.items[key]
	if !ok {
		return nil, ErrNotFound
	}

	return value, nil
}

// Set will persist a value to the cache or
// override existing one with the new one
func (r *MemoryNoTS) Set(key string, value interface{}) error {
	r.items[key] = value
	return nil
}

// Delete deletes a given key, it doesnt return error if the item is not in the
// system
func (r *MemoryNoTS) Delete(key string) error {
	delete(r.items, key)
	return nil
}