| package subscription |
|
|
| import ( |
| "fmt" |
| ) |
|
|
| type PatchConflictError struct { |
| Msg string |
| } |
|
|
| func (e *PatchConflictError) Error() string { |
| return fmt.Sprintf("patch conflict error: %s", e.Msg) |
| } |
|
|
| type PatchValidationError struct { |
| Msg string |
| } |
|
|
| func (e *PatchValidationError) Error() string { |
| return fmt.Sprintf("patch validation error: %s", e.Msg) |
| } |
|
|
| type PatchForbiddenError struct { |
| Msg string |
| } |
|
|
| func (e *PatchForbiddenError) Error() string { |
| return fmt.Sprintf("patch forbidden error: %s", e.Msg) |
| } |
|
|
| type PatchOperation string |
|
|
| const ( |
| PatchOperationAdd PatchOperation = "add" |
| PatchOperationRemove PatchOperation = "remove" |
| PatchOperationUnschedule PatchOperation = "unschedule" |
| PatchOperationStretch PatchOperation = "stretch" |
| ) |
|
|
| func (o PatchOperation) Validate() error { |
| switch o { |
| case PatchOperationAdd, PatchOperationRemove, PatchOperationStretch, PatchOperationUnschedule: |
| return nil |
| default: |
| return fmt.Errorf("invalid patch operation: %s", o) |
| } |
| } |
|
|
| type Patch interface { |
| AppliesToSpec |
| Validate() error |
| Op() PatchOperation |
| Path() SpecPath |
| } |
|
|
| type AnyValuePatch interface { |
| ValueAsAny() any |
| } |
|
|
| type ValuePatch[T any] interface { |
| Patch |
| Value() T |
| AnyValuePatch |
| } |
|
|
| func ToApplies(p Patch, _ int) AppliesToSpec { |
| return p |
| } |
|
|