/
action_validator.go
58 lines (48 loc) · 2.2 KB
/
action_validator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Copyright 2022 The Serverless Workflow Specification Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package model
import (
validator "github.com/go-playground/validator/v10"
val "github.com/serverlessworkflow/sdk-go/v2/validator"
)
func init() {
val.GetValidator().RegisterStructValidationCtx(ValidationWrap(actionStructLevelValidationCtx), Action{})
val.GetValidator().RegisterStructValidationCtx(ValidationWrap(functionRefStructLevelValidation), FunctionRef{})
}
func actionStructLevelValidationCtx(ctx ValidatorContext, structLevel validator.StructLevel) {
action := structLevel.Current().Interface().(Action)
if action.FunctionRef == nil && action.EventRef == nil && action.SubFlowRef == nil {
structLevel.ReportError(action.FunctionRef, "FunctionRef", "FunctionRef", "required_without", "")
return
}
values := []bool{
action.FunctionRef != nil,
action.EventRef != nil,
action.SubFlowRef != nil,
}
if validationNotExclusiveParamters(values) {
structLevel.ReportError(action.FunctionRef, "FunctionRef", "FunctionRef", val.TagExclusive, "")
structLevel.ReportError(action.EventRef, "EventRef", "EventRef", val.TagExclusive, "")
structLevel.ReportError(action.SubFlowRef, "SubFlowRef", "SubFlowRef", val.TagExclusive, "")
}
if action.RetryRef != "" && !ctx.ExistRetry(action.RetryRef) {
structLevel.ReportError(action.RetryRef, "RetryRef", "RetryRef", val.TagExists, "")
}
}
func functionRefStructLevelValidation(ctx ValidatorContext, structLevel validator.StructLevel) {
functionRef := structLevel.Current().Interface().(FunctionRef)
if !ctx.ExistFunction(functionRef.RefName) {
structLevel.ReportError(functionRef.RefName, "RefName", "RefName", val.TagExists, functionRef.RefName)
}
}