diff --git a/src/exp/grpcroute.rs b/src/exp/grpcroute.rs index 75236d0..3a17ad8 100644 --- a/src/exp/grpcroute.rs +++ b/src/exp/grpcroute.rs @@ -409,6 +409,27 @@ pub enum GrpcRouteFilter { }, } +impl From for HttpRouteFilter { + fn from(filter: GrpcRouteFilter) -> Self { + match filter { + GrpcRouteFilter::ExtensionRef { extension_ref } => Self::ExtensionRef { extension_ref }, + GrpcRouteFilter::RequestMirror { request_mirror } => { + Self::RequestMirror { request_mirror } + } + GrpcRouteFilter::RequestHeaderModifier { + request_header_modifier, + } => Self::RequestHeaderModifier { + request_header_modifier, + }, + GrpcRouteFilter::ResponseHeaderModifier { + response_header_modifier, + } => Self::ResponseHeaderModifier { + response_header_modifier, + }, + } + } +} + /// GrpcBackendRef defines how a GrpcRoute forwards a gRPC request. /// /// Note that when a namespace different from the local namespace is specified, a @@ -461,7 +482,23 @@ pub struct GrpcRouteBackendRef { /// /// Support for this field varies based on the context where used. #[serde(default, skip_serializing_if = "Option::is_none")] - pub weight: Option, + pub weight: Option, +} + +impl From for HttpBackendRef { + fn from(backend: GrpcRouteBackendRef) -> Self { + let filters = backend + .filters + .map(|filters| filters.into_iter().map(Into::into).collect()); + + Self { + filters, + backend_ref: Some(BackendRef { + inner: backend.inner, + weight: backend.weight, + }), + } + } } #[cfg(test)]