1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/utils/json/patch.go

48 lines
1 KiB
Go
Raw Normal View History

package json
import (
"encoding/json"
jsonpatch "github.com/evanphx/json-patch"
)
type PatchOperation struct {
Path string `json:"path"`
Op string `json:"op"`
Value interface{} `json:"value,omitempty"`
}
func NewPatchOperation(path, op string, value interface{}) PatchOperation {
return PatchOperation{path, op, value}
}
func (p *PatchOperation) Marshal() ([]byte, error) {
return json.Marshal(p)
}
func (p *PatchOperation) ToPatchBytes() ([]byte, error) {
if patch, err := json.Marshal(p); err != nil {
return nil, err
} else {
return JoinPatches(patch), nil
}
}
func MarshalPatchOperation(path, op string, value interface{}) ([]byte, error) {
p := NewPatchOperation(path, op, value)
return p.Marshal()
}
func CheckPatch(patch []byte) error {
_, err := jsonpatch.DecodePatch([]byte("[" + string(patch) + "]"))
return err
}
func UnmarshalPatchOperation(patch []byte) (*PatchOperation, error) {
var p PatchOperation
if err := json.Unmarshal(patch, &p); err != nil {
return nil, err
}
return &p, nil
}