@@ -24,19 +24,34 @@ var _ validator.String = networkValidator{}
24
24
const (
25
25
IPV4 NetworkValidatorType = "ipv4"
26
26
IPV4WithCIDR NetworkValidatorType = "ipv4_with_cidr"
27
- IPv4WithNetmask NetworkValidatorType = "ipv4_with_netmask"
27
+ IPV4WithNetmask NetworkValidatorType = "ipv4_with_netmask"
28
+ IPV4Range NetworkValidatorType = "ipv4_range"
28
29
RFC1918 NetworkValidatorType = "rfc1918"
30
+
31
+ TCPUDPPortRange NetworkValidatorType = "tcpudp_port_range"
29
32
)
30
33
31
- type NetworkValidatorType string
34
+ var networkValidatorTypes = map [NetworkValidatorType ]validator.String {
35
+ IPV4 : networkTypes .IsIPV4 (),
36
+ IPV4WithCIDR : networkTypes .IsIPV4WithCIDR (),
37
+ IPV4WithNetmask : networkTypes .IsIPV4WithNetmask (),
38
+ IPV4Range : networkTypes .IsIPV4Range (),
39
+ RFC1918 : networkTypes .IsRFC1918 (),
32
40
33
- type networkValidator struct {
34
- NetworkTypes []NetworkValidatorType
35
- ComparatorOR bool
41
+ TCPUDPPortRange : networkTypes .IsTCPUDPPortRange (),
36
42
}
37
43
44
+ type (
45
+ NetworkValidatorType string
46
+
47
+ networkValidator struct {
48
+ NetworkTypes []NetworkValidatorType
49
+ ComparatorOR bool
50
+ }
51
+ )
52
+
38
53
// Description describes the validation in plain text formatting.
39
- func (validatorNet networkValidator ) Description (_ context.Context ) string {
54
+ func (validatorNet networkValidator ) Description (ctx context.Context ) string {
40
55
description := ""
41
56
switch {
42
57
case validatorNet .ComparatorOR && len (validatorNet .NetworkTypes ) > 1 :
@@ -48,17 +63,17 @@ func (validatorNet networkValidator) Description(_ context.Context) string {
48
63
}
49
64
50
65
for _ , networkType := range validatorNet .NetworkTypes {
51
- switch networkType {
52
- case IPV4 :
53
- description += fmt .Sprintf ("%s, " , networkTypes .IsIPV4 ().Description (context .Background ()))
54
- case IPV4WithCIDR :
55
- description += fmt .Sprintf ("%s, " , networkTypes .IsIPV4WithCIDR ().Description (context .Background ()))
56
- case IPv4WithNetmask :
57
- description += fmt .Sprintf ("%s, " , networkTypes .IsIPV4WithNetmask ().Description (context .Background ()))
58
- case RFC1918 :
59
- description += fmt .Sprintf ("%s, " , networkTypes .IsRFC1918 ().Description (context .Background ()))
66
+ for k , v := range networkValidatorTypes {
67
+ if networkType == k {
68
+ description += fmt .Sprintf ("%s, " , v .Description (ctx ))
69
+ }
60
70
}
61
71
}
72
+
73
+ if len (validatorNet .NetworkTypes ) > 1 {
74
+ description = description [:len (description )- 2 ]
75
+ }
76
+
62
77
return description
63
78
}
64
79
@@ -95,15 +110,10 @@ func (validatorNet networkValidator) MarkdownDescription(ctx context.Context) st
95
110
}
96
111
97
112
for i , networkType := range validatorNet .NetworkTypes {
98
- switch networkType {
99
- case IPV4 :
100
- markdownDescription += computeDescription (networkTypes .IsIPV4 ().MarkdownDescription (ctx ), i )
101
- case IPV4WithCIDR :
102
- markdownDescription += computeDescription (networkTypes .IsIPV4WithCIDR ().MarkdownDescription (ctx ), i )
103
- case IPv4WithNetmask :
104
- markdownDescription += computeDescription (networkTypes .IsIPV4WithNetmask ().MarkdownDescription (ctx ), i )
105
- case RFC1918 :
106
- markdownDescription += computeDescription (networkTypes .IsRFC1918 ().MarkdownDescription (ctx ), i )
113
+ for k , v := range networkValidatorTypes {
114
+ if networkType == k {
115
+ markdownDescription += computeDescription (v .MarkdownDescription (ctx ), i )
116
+ }
107
117
}
108
118
}
109
119
@@ -117,6 +127,7 @@ func (validatorNet networkValidator) ValidateString(
117
127
response * validator.StringResponse ,
118
128
) {
119
129
if request .ConfigValue .IsNull () || request .ConfigValue .IsUnknown () {
130
+ // skip validation if value is null or unknown
120
131
return
121
132
}
122
133
@@ -131,49 +142,17 @@ func (validatorNet networkValidator) ValidateString(
131
142
diags := diag.Diagnostics {}
132
143
133
144
for _ , networkType := range validatorNet .NetworkTypes {
134
- switch networkType {
135
- case IPV4 :
136
- d := new (validator.StringResponse )
137
-
138
- networkTypes .IsIPV4 ().ValidateString (ctx , request , d )
139
- if d .Diagnostics .HasError () && ! validatorNet .ComparatorOR {
140
- response .Diagnostics .Append (d .Diagnostics ... )
141
- } else if d .Diagnostics .HasError () && validatorNet .ComparatorOR {
142
- diags .Append (d .Diagnostics ... )
143
- }
144
- case IPV4WithCIDR :
145
- d := new (validator.StringResponse )
146
-
147
- networkTypes .IsIPV4WithCIDR ().ValidateString (ctx , request , d )
148
- if d .Diagnostics .HasError () && ! validatorNet .ComparatorOR {
149
- response .Diagnostics .Append (d .Diagnostics ... )
150
- } else if d .Diagnostics .HasError () && validatorNet .ComparatorOR {
151
- diags .Append (d .Diagnostics ... )
152
- }
153
- case IPv4WithNetmask :
154
- d := new (validator.StringResponse )
155
-
156
- networkTypes .IsIPV4WithNetmask ().ValidateString (ctx , request , d )
157
- if d .Diagnostics .HasError () && ! validatorNet .ComparatorOR {
158
- response .Diagnostics .Append (d .Diagnostics ... )
159
- } else if d .Diagnostics .HasError () && validatorNet .ComparatorOR {
160
- diags .Append (d .Diagnostics ... )
161
- }
162
- case RFC1918 :
163
- d := new (validator.StringResponse )
164
-
165
- networkTypes .IsRFC1918 ().ValidateString (ctx , request , d )
166
- if d .Diagnostics .HasError () && ! validatorNet .ComparatorOR {
167
- response .Diagnostics .Append (d .Diagnostics ... )
168
- } else if d .Diagnostics .HasError () && validatorNet .ComparatorOR {
169
- diags .Append (d .Diagnostics ... )
170
- }
171
- default :
145
+ d := new (validator.StringResponse )
146
+ if _ , ok := networkValidatorTypes [networkType ]; ! ok {
172
147
response .Diagnostics .AddError (
173
148
"Invalid network type" ,
174
149
fmt .Sprintf ("invalid network type: %s" , networkType ),
175
150
)
151
+ return
176
152
}
153
+
154
+ networkValidatorTypes [networkType ].ValidateString (ctx , request , d )
155
+ diags .Append (d .Diagnostics ... )
177
156
}
178
157
179
158
if validatorNet .ComparatorOR && diags .ErrorsCount () == len (validatorNet .NetworkTypes ) {
@@ -182,6 +161,10 @@ func (validatorNet networkValidator) ValidateString(
182
161
"Set at least one valid network type" ,
183
162
)
184
163
}
164
+
165
+ if ! validatorNet .ComparatorOR {
166
+ response .Diagnostics .Append (diags ... )
167
+ }
185
168
}
186
169
187
170
/*
0 commit comments