@@ -39,20 +39,21 @@ func (p *ProxyProtocol) UnmarshalJSON(data []byte) error {
3939
4040// SpectrumApplication defines a single Spectrum Application.
4141type SpectrumApplication struct {
42- ID string `json:"id,omitempty"`
43- Protocol string `json:"protocol,omitempty"`
44- IPv4 bool `json:"ipv4,omitempty"`
45- DNS SpectrumApplicationDNS `json:"dns,omitempty"`
46- OriginDirect []string `json:"origin_direct,omitempty"`
47- OriginPort int `json:"origin_port,omitempty"`
48- OriginDNS * SpectrumApplicationOriginDNS `json:"origin_dns,omitempty"`
49- IPFirewall bool `json:"ip_firewall,omitempty"`
50- ProxyProtocol ProxyProtocol `json:"proxy_protocol,omitempty"`
51- TLS string `json:"tls,omitempty"`
52- TrafficType string `json:"traffic_type,omitempty"`
53- EdgeIPs * EdgeIPs `json:"edge_ips,omitempty"`
54- CreatedOn * time.Time `json:"created_on,omitempty"`
55- ModifiedOn * time.Time `json:"modified_on,omitempty"`
42+ ID string `json:"id,omitempty"`
43+ Protocol string `json:"protocol,omitempty"`
44+ IPv4 bool `json:"ipv4,omitempty"`
45+ DNS SpectrumApplicationDNS `json:"dns,omitempty"`
46+ OriginDirect []string `json:"origin_direct,omitempty"`
47+ OriginPort int `json:"origin_port,omitempty"`
48+ OriginDNS * SpectrumApplicationOriginDNS `json:"origin_dns,omitempty"`
49+ IPFirewall bool `json:"ip_firewall,omitempty"`
50+ ProxyProtocol ProxyProtocol `json:"proxy_protocol,omitempty"`
51+ TLS string `json:"tls,omitempty"`
52+ TrafficType string `json:"traffic_type,omitempty"`
53+ EdgeIPs * SpectrumApplicationEdgeIPs `json:"edge_ips,omitempty"`
54+ ArgoSmartRouting bool `json:"argo_smart_routing,omitempty"`
55+ CreatedOn * time.Time `json:"created_on,omitempty"`
56+ ModifiedOn * time.Time `json:"modified_on,omitempty"`
5657}
5758
5859// UnmarshalJSON handles setting the `ProxyProtocol` field based on the value of the deprecated `spp` field.
@@ -105,43 +106,95 @@ type SpectrumApplicationsDetailResponse struct {
105106 Result []SpectrumApplication `json:"result"`
106107}
107108
108- // EdgeIPs represents configuration for Bring-Your-Own-IP
109+ // SpectrumApplicationEdgeIPs represents configuration for Bring-Your-Own-IP
109110// https://developers.cloudflare.com/spectrum/getting-started/byoip/
110- type EdgeIPs struct {
111- Type EdgeType `json:"type"`
112- IPs []net.IP `json:"ips,omitempty"`
111+ type SpectrumApplicationEdgeIPs struct {
112+ Type SpectrumApplicationEdgeType `json:"type"`
113+ Connectivity * SpectrumApplicationConnectivity `json:"connectivity,omitempty"`
114+ IPs []net.IP `json:"ips,omitempty"`
113115}
114116
115- // EdgeType for possible Edge configurations
116- type EdgeType string
117+ // SpectrumApplicationEdgeType for possible Edge configurations
118+ type SpectrumApplicationEdgeType string
117119
118120const (
119- // STATIC IP config
120- STATIC EdgeType = "static"
121+ // SpectrumEdgeTypeDynamic IP config
122+ SpectrumEdgeTypeDynamic SpectrumApplicationEdgeType = "dynamic"
123+ // SpectrumEdgeTypeStatic IP config
124+ SpectrumEdgeTypeStatic SpectrumApplicationEdgeType = "static"
121125)
122126
123- // UnmarshalJSON function for EdgeType enum
124- func (t * EdgeType ) UnmarshalJSON (b []byte ) error {
127+ // UnmarshalJSON function for SpectrumApplicationEdgeType enum
128+ func (t * SpectrumApplicationEdgeType ) UnmarshalJSON (b []byte ) error {
125129 var s string
126130 err := json .Unmarshal (b , & s )
127131 if err != nil {
128132 return err
129133 }
130134
131- newEdgeType := EdgeType (strings .ToLower (s ))
135+ newEdgeType := SpectrumApplicationEdgeType (strings .ToLower (s ))
132136 switch newEdgeType {
133- case STATIC :
137+ case SpectrumEdgeTypeDynamic , SpectrumEdgeTypeStatic :
134138 * t = newEdgeType
135139 return nil
136140 }
137141
138142 return errors .New (errUnmarshalError )
139143}
140144
141- func (t EdgeType ) String () string {
145+ func (t SpectrumApplicationEdgeType ) String () string {
142146 return string (t )
143147}
144148
149+ // SpectrumApplicationConnectivity specifies IP address type on the edge configuration
150+ type SpectrumApplicationConnectivity string
151+
152+ const (
153+ // SpectrumConnectivityAll specifies IPv4/6 edge IP
154+ SpectrumConnectivityAll SpectrumApplicationConnectivity = "all"
155+ // SpectrumConnectivityIPv4 specifies IPv4 edge IP
156+ SpectrumConnectivityIPv4 SpectrumApplicationConnectivity = "ipv4"
157+ // SpectrumConnectivityIPv6 specifies IPv6 edge IP
158+ SpectrumConnectivityIPv6 SpectrumApplicationConnectivity = "ipv6"
159+ // SpectrumConnectivityStatic specifies static edge IP configuration
160+ SpectrumConnectivityStatic SpectrumApplicationConnectivity = "static"
161+ )
162+
163+ func (c SpectrumApplicationConnectivity ) String () string {
164+ return string (c )
165+ }
166+
167+ // UnmarshalJSON function for SpectrumApplicationConnectivity enum
168+ func (c * SpectrumApplicationConnectivity ) UnmarshalJSON (b []byte ) error {
169+ var s string
170+ err := json .Unmarshal (b , & s )
171+ if err != nil {
172+ return err
173+ }
174+
175+ newConnectivity := SpectrumApplicationConnectivity (strings .ToLower (s ))
176+ if newConnectivity .Dynamic () {
177+ * c = newConnectivity
178+ return nil
179+ }
180+
181+ return errors .New (errUnmarshalError )
182+ }
183+
184+ // Dynamic checks if address family is specified as dynamic config
185+ func (c SpectrumApplicationConnectivity ) Dynamic () bool {
186+ switch c {
187+ case SpectrumConnectivityAll , SpectrumConnectivityIPv4 , SpectrumConnectivityIPv6 :
188+ return true
189+ }
190+ return false
191+ }
192+
193+ // Static checks if address family is specified as static config
194+ func (c SpectrumApplicationConnectivity ) Static () bool {
195+ return c == SpectrumConnectivityStatic
196+ }
197+
145198// SpectrumApplications fetches all of the Spectrum applications for a zone.
146199//
147200// API reference: https://developers.cloudflare.com/spectrum/api-reference/#list-spectrum-applications
0 commit comments