pkg/model/core/route.go (87 lines of code) (raw):

package core import ( "context" "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" gwv1 "sigs.k8s.io/gateway-api/apis/v1" gwv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" ) type RouteType string type Route interface { Spec() RouteSpec Status() RouteStatus Name() string Namespace() string DeletionTimestamp() *metav1.Time DeepCopy() Route K8sObject() client.Object GroupKind() metav1.GroupKind } func NewRoute(object client.Object) (Route, error) { switch obj := object.(type) { case *gwv1.HTTPRoute: return NewHTTPRoute(*obj), nil case *gwv1.GRPCRoute: return NewGRPCRoute(*obj), nil case *gwv1alpha2.TLSRoute: return NewTLSRoute((*obj)), nil default: return nil, fmt.Errorf("unexpected route type for object %+v", object) } } func ListAllRoutes(context context.Context, client client.Client) ([]Route, error) { httpRoutes, err := ListHTTPRoutes(context, client) if err != nil { return nil, err } grpcRoutes, err := ListGRPCRoutes(context, client) if err != nil { return nil, err } tlsRoutes, err := ListTLSRoutes(context, client) if err != nil { return nil, err } var routes []Route routes = append(routes, httpRoutes...) routes = append(routes, grpcRoutes...) routes = append(routes, tlsRoutes...) return routes, nil } type RouteSpec interface { ParentRefs() []gwv1.ParentReference Hostnames() []gwv1.Hostname Rules() []RouteRule Equals(routeSpec RouteSpec) bool } type RouteStatus interface { Parents() []gwv1.RouteParentStatus SetParents(parents []gwv1.RouteParentStatus) UpdateParentRefs(parent gwv1.ParentReference, controllerName gwv1.GatewayController) UpdateRouteCondition(parent gwv1.ParentReference, condition metav1.Condition) } type RouteRule interface { BackendRefs() []BackendRef Matches() []RouteMatch Equals(routeRule RouteRule) bool } type BackendRef interface { Weight() *int32 Group() *gwv1.Group Kind() *gwv1.Kind Name() gwv1.ObjectName Namespace() *gwv1.Namespace Port() *gwv1.PortNumber Equals(backendRef BackendRef) bool } type RouteMatch interface { Headers() []HeaderMatch Equals(routeMatch RouteMatch) bool } type HeaderMatch interface { Type() *gwv1.HeaderMatchType Name() string Value() string Equals(headerMatch HeaderMatch) bool }