예제 #1
0
파일: fs.go 프로젝트: app-kit/go-appkit
// Save a new item into the cache.
func (fs *Fs) Set(item kit.CacheItem) apperror.Error {
	key := fs.key(item.GetKey())
	if key == "" {
		return apperror.New("empty_key")
	}

	if item.IsExpired() {
		return apperror.New("item_expired")
	}

	value, err := item.ToString()
	if err != nil {
		return apperror.Wrap(err, "cacheitem_tostring_error")
	}
	if value == "" {
		return apperror.New("empty_value")
	}

	// Marshal metadata.
	tmpVal := item.GetValue()
	item.SetValue(nil)

	js, err2 := json.Marshal(item)
	if err2 != nil {
		return apperror.Wrap(err2, "json_marshal_error")
	}
	item.SetValue(tmpVal)

	if err := utils.WriteFile(fs.keyPath(key), []byte(value), false); err != nil {
		return err
	}
	if err := utils.WriteFile(fs.keyMetaPath(key), js, false); err != nil {
		return err
	}

	return nil
}