package awsappmesh


// An object that represents a gateway route specification.
//
// Specify one gateway route type.
//
// Example:
//   // The code below shows an example of how to instantiate this type.
//   // The values are placeholders you should change.
//   import "github.com/aws/aws-cdk-go/awscdk"
//
//   gatewayRouteSpecProperty := &GatewayRouteSpecProperty{
//   	GrpcRoute: &GrpcGatewayRouteProperty{
//   		Action: &GrpcGatewayRouteActionProperty{
//   			Target: &GatewayRouteTargetProperty{
//   				VirtualService: &GatewayRouteVirtualServiceProperty{
//   					VirtualServiceName: jsii.String("virtualServiceName"),
//   				},
//
//   				// the properties below are optional
//   				Port: jsii.Number(123),
//   			},
//
//   			// the properties below are optional
//   			Rewrite: &GrpcGatewayRouteRewriteProperty{
//   				Hostname: &GatewayRouteHostnameRewriteProperty{
//   					DefaultTargetHostname: jsii.String("defaultTargetHostname"),
//   				},
//   			},
//   		},
//   		Match: &GrpcGatewayRouteMatchProperty{
//   			Hostname: &GatewayRouteHostnameMatchProperty{
//   				Exact: jsii.String("exact"),
//   				Suffix: jsii.String("suffix"),
//   			},
//   			Metadata: []interface{}{
//   				&GrpcGatewayRouteMetadataProperty{
//   					Name: jsii.String("name"),
//
//   					// the properties below are optional
//   					Invert: jsii.Boolean(false),
//   					Match: &GatewayRouteMetadataMatchProperty{
//   						Exact: jsii.String("exact"),
//   						Prefix: jsii.String("prefix"),
//   						Range: &GatewayRouteRangeMatchProperty{
//   							End: jsii.Number(123),
//   							Start: jsii.Number(123),
//   						},
//   						Regex: jsii.String("regex"),
//   						Suffix: jsii.String("suffix"),
//   					},
//   				},
//   			},
//   			Port: jsii.Number(123),
//   			ServiceName: jsii.String("serviceName"),
//   		},
//   	},
//   	Http2Route: &HttpGatewayRouteProperty{
//   		Action: &HttpGatewayRouteActionProperty{
//   			Target: &GatewayRouteTargetProperty{
//   				VirtualService: &GatewayRouteVirtualServiceProperty{
//   					VirtualServiceName: jsii.String("virtualServiceName"),
//   				},
//
//   				// the properties below are optional
//   				Port: jsii.Number(123),
//   			},
//
//   			// the properties below are optional
//   			Rewrite: &HttpGatewayRouteRewriteProperty{
//   				Hostname: &GatewayRouteHostnameRewriteProperty{
//   					DefaultTargetHostname: jsii.String("defaultTargetHostname"),
//   				},
//   				Path: &HttpGatewayRoutePathRewriteProperty{
//   					Exact: jsii.String("exact"),
//   				},
//   				Prefix: &HttpGatewayRoutePrefixRewriteProperty{
//   					DefaultPrefix: jsii.String("defaultPrefix"),
//   					Value: jsii.String("value"),
//   				},
//   			},
//   		},
//   		Match: &HttpGatewayRouteMatchProperty{
//   			Headers: []interface{}{
//   				&HttpGatewayRouteHeaderProperty{
//   					Name: jsii.String("name"),
//
//   					// the properties below are optional
//   					Invert: jsii.Boolean(false),
//   					Match: &HttpGatewayRouteHeaderMatchProperty{
//   						Exact: jsii.String("exact"),
//   						Prefix: jsii.String("prefix"),
//   						Range: &GatewayRouteRangeMatchProperty{
//   							End: jsii.Number(123),
//   							Start: jsii.Number(123),
//   						},
//   						Regex: jsii.String("regex"),
//   						Suffix: jsii.String("suffix"),
//   					},
//   				},
//   			},
//   			Hostname: &GatewayRouteHostnameMatchProperty{
//   				Exact: jsii.String("exact"),
//   				Suffix: jsii.String("suffix"),
//   			},
//   			Method: jsii.String("method"),
//   			Path: &HttpPathMatchProperty{
//   				Exact: jsii.String("exact"),
//   				Regex: jsii.String("regex"),
//   			},
//   			Port: jsii.Number(123),
//   			Prefix: jsii.String("prefix"),
//   			QueryParameters: []interface{}{
//   				&QueryParameterProperty{
//   					Name: jsii.String("name"),
//
//   					// the properties below are optional
//   					Match: &HttpQueryParameterMatchProperty{
//   						Exact: jsii.String("exact"),
//   					},
//   				},
//   			},
//   		},
//   	},
//   	HttpRoute: &HttpGatewayRouteProperty{
//   		Action: &HttpGatewayRouteActionProperty{
//   			Target: &GatewayRouteTargetProperty{
//   				VirtualService: &GatewayRouteVirtualServiceProperty{
//   					VirtualServiceName: jsii.String("virtualServiceName"),
//   				},
//
//   				// the properties below are optional
//   				Port: jsii.Number(123),
//   			},
//
//   			// the properties below are optional
//   			Rewrite: &HttpGatewayRouteRewriteProperty{
//   				Hostname: &GatewayRouteHostnameRewriteProperty{
//   					DefaultTargetHostname: jsii.String("defaultTargetHostname"),
//   				},
//   				Path: &HttpGatewayRoutePathRewriteProperty{
//   					Exact: jsii.String("exact"),
//   				},
//   				Prefix: &HttpGatewayRoutePrefixRewriteProperty{
//   					DefaultPrefix: jsii.String("defaultPrefix"),
//   					Value: jsii.String("value"),
//   				},
//   			},
//   		},
//   		Match: &HttpGatewayRouteMatchProperty{
//   			Headers: []interface{}{
//   				&HttpGatewayRouteHeaderProperty{
//   					Name: jsii.String("name"),
//
//   					// the properties below are optional
//   					Invert: jsii.Boolean(false),
//   					Match: &HttpGatewayRouteHeaderMatchProperty{
//   						Exact: jsii.String("exact"),
//   						Prefix: jsii.String("prefix"),
//   						Range: &GatewayRouteRangeMatchProperty{
//   							End: jsii.Number(123),
//   							Start: jsii.Number(123),
//   						},
//   						Regex: jsii.String("regex"),
//   						Suffix: jsii.String("suffix"),
//   					},
//   				},
//   			},
//   			Hostname: &GatewayRouteHostnameMatchProperty{
//   				Exact: jsii.String("exact"),
//   				Suffix: jsii.String("suffix"),
//   			},
//   			Method: jsii.String("method"),
//   			Path: &HttpPathMatchProperty{
//   				Exact: jsii.String("exact"),
//   				Regex: jsii.String("regex"),
//   			},
//   			Port: jsii.Number(123),
//   			Prefix: jsii.String("prefix"),
//   			QueryParameters: []interface{}{
//   				&QueryParameterProperty{
//   					Name: jsii.String("name"),
//
//   					// the properties below are optional
//   					Match: &HttpQueryParameterMatchProperty{
//   						Exact: jsii.String("exact"),
//   					},
//   				},
//   			},
//   		},
//   	},
//   	Priority: jsii.Number(123),
//   }
//
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-gatewayroute-gatewayroutespec.html
//
type CfnGatewayRoute_GatewayRouteSpecProperty struct {
	// An object that represents the specification of a gRPC gateway route.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-gatewayroute-gatewayroutespec.html#cfn-appmesh-gatewayroute-gatewayroutespec-grpcroute
	//
	GrpcRoute interface{} `field:"optional" json:"grpcRoute" yaml:"grpcRoute"`
	// An object that represents the specification of an HTTP/2 gateway route.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-gatewayroute-gatewayroutespec.html#cfn-appmesh-gatewayroute-gatewayroutespec-http2route
	//
	Http2Route interface{} `field:"optional" json:"http2Route" yaml:"http2Route"`
	// An object that represents the specification of an HTTP gateway route.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-gatewayroute-gatewayroutespec.html#cfn-appmesh-gatewayroute-gatewayroutespec-httproute
	//
	HttpRoute interface{} `field:"optional" json:"httpRoute" yaml:"httpRoute"`
	// The ordering of the gateway routes spec.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appmesh-gatewayroute-gatewayroutespec.html#cfn-appmesh-gatewayroute-gatewayroutespec-priority
	//
	Priority *float64 `field:"optional" json:"priority" yaml:"priority"`
}

