func (f *FilterChain) ConstructUsableRouteConfiguration(config RouteConfigUpdate) ([]VirtualHostWithInterceptors, error) {
	vhs := make([]VirtualHostWithInterceptors, len(config.VirtualHosts))
	for _, vh := range config.VirtualHosts {
		vhwi, err := f.convertVirtualHost(vh)
		if err != nil {
			return nil, fmt.Errorf("virtual host construction: %v", err)
		}
		vhs = append(vhs, vhwi)
	}
	return vhs, nil
}
ConstructUsableRouteConfiguration takes Route Configuration and converts it
into matchable route configuration, with instantiated HTTP Filters per route.
package xdsclient
import (
	"errors"
	"fmt"
	"net"
	v3listenerpb "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3"
	v3httppb "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3"
	v3tlspb "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/tls/v3"
	"github.com/golang/protobuf/proto"
	"github.com/golang/protobuf/ptypes"
	"google.golang.org/grpc/internal/resolver"
	"google.golang.org/grpc/internal/xds/env"
	"google.golang.org/grpc/xds/internal/httpfilter"
	"google.golang.org/grpc/xds/internal/version"
)
const (
	unspecifiedPrefixMapKey = "unspecified"
	noPrefixMatch          = -2
	unspecifiedPrefixMatch = -1
)
type FilterChain struct {
	SecurityCfg *SecurityConfig
	HTTPFilters []HTTPFilter
	RouteConfigName string
	InlineRouteConfig *RouteConfigUpdate
}
type VirtualHostWithInterceptors struct {
	Domains []string
	Routes []RouteWithInterceptors
}
type RouteWithInterceptors struct {
	M *CompositeMatcher
	RouteAction RouteAction
	Interceptors []resolver.ServerInterceptor
}