示例#1
0
// SetKey sets a key value for a given configuration
func SetKey(opts config.Options) config.ResponseObject {
	resp := config.ResponseObject{
		Action: "set",
	}
	// Do not allow empty values to be set
	if opts.Value == nil {
		resp.Error = ValueRequiredMsg
		return resp
	}

	if opts.CfgName == "" {
		resp.Error = MissingCfgNameMsg
		return resp
	}

	key, keyErr := formatKeyName(opts.Key)
	if keyErr == nil {
		opts.Key = key
		storageResponse, err := storage.Update(opts)
		if err != nil {
			resp.Error = err.Error()
			resp.Message = "Error updating key value"
		} else {
			resp.Item.Key = key
			resp.Item.Value = opts.Value
			resp.Item.Version = 1

			// Only set PrevItem if there was a previous value
			if storageResponse.Value != nil {
				resp.PrevItem = storageResponse
				resp.PrevItem.Key = key
				// Update the current item's value if there was a previous version
				resp.Item.Version = resp.PrevItem.Version + 1
			}
		}
	} else {
		resp.Error = keyErr.Error()
	}
	return resp
}