@@ -7,34 +7,34 @@ import (
77 jellidation "github.com/jellydator/validation"
88)
99
10- type Lifecycle struct {
11- Type string `json:"type"`
12- Data * LifecycleData `json:"data"`
13- }
14-
15- func (l Lifecycle ) Validate () error {
16- lifecycleDataRule := jellidation .By (func (value any ) error {
17- data , ok := value .(* LifecycleData )
18- if ! ok {
19- return fmt .Errorf ("%T is not supported, LifecycleData is expected" , value )
20- }
10+ var validLifecycleData lifeCycleDataRule
2111
22- if l .Type == "docker" {
23- return data .ValidateDockerLifecycleData ()
24- }
12+ type lifeCycleDataRule struct {}
2513
26- if l .Type == "buildpack" {
27- return data .ValidateBuildpackLifecycleData ()
28- }
14+ func (d lifeCycleDataRule ) Validate (value any ) error {
15+ data , ok := value .(LifecycleData )
16+ if ! ok {
17+ return fmt .Errorf ("%T is not supported, LifecycleData is expected" , value )
18+ }
19+ return jellidation .ValidateStruct (& data ,
20+ jellidation .Field (& data .Stack , jellidation .Required ),
21+ )
22+ }
2923
30- return nil
31- })
24+ type Lifecycle struct {
25+ Type string `json:"type"`
26+ Data LifecycleData `json:"data"`
27+ }
3228
29+ func (l Lifecycle ) Validate () error {
3330 return jellidation .ValidateStruct (& l ,
3431 jellidation .Field (& l .Type ,
3532 jellidation .Required ,
3633 validation .OneOf ("buildpack" , "docker" )),
37- jellidation .Field (& l .Data , jellidation .Required , lifecycleDataRule ),
34+ jellidation .Field (& l .Data ,
35+ jellidation .When (l .Type == "buildpack" , jellidation .Required , validLifecycleData ).
36+ Else (jellidation .Empty .Error ("must be an empty object" )),
37+ ),
3838 )
3939}
4040
@@ -43,16 +43,6 @@ type LifecycleData struct {
4343 Stack string `json:"stack,omitempty"`
4444}
4545
46- func (d LifecycleData ) ValidateBuildpackLifecycleData () error {
47- return jellidation .ValidateStruct (& d ,
48- jellidation .Field (& d .Stack , jellidation .Required ),
49- )
50- }
51-
52- func (d LifecycleData ) ValidateDockerLifecycleData () error {
53- return jellidation .Validate (& d , jellidation .In (LifecycleData {}).Error ("must be an empty object" ))
54- }
55-
5646type LifecyclePatch struct {
5747 Type string `json:"type"`
5848 Data * LifecycleDataPatch `json:"data"`
0 commit comments