// 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 }