// Code generated by create_version. DO NOT EDIT. // Copyright 2020 Envoyproxy Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package rest provides an implementation of REST-JSON part of XDS server package rest import ( "context" "errors" discovery "github.com/datawire/ambassador/v2/pkg/api/envoy/service/discovery/v3" "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/cache/v3" ) type Server interface { Fetch(context.Context, *discovery.DiscoveryRequest) (*discovery.DiscoveryResponse, error) } type Callbacks interface { // OnFetchRequest is called for each Fetch request. Returning an error will end processing of the // request and respond with an error. OnFetchRequest(context.Context, *discovery.DiscoveryRequest) error // OnFetchResponse is called immediately prior to sending a response. OnFetchResponse(*discovery.DiscoveryRequest, *discovery.DiscoveryResponse) } func NewServer(config cache.ConfigFetcher, callbacks Callbacks) Server { return &server{cache: config, callbacks: callbacks} } type server struct { cache cache.ConfigFetcher callbacks Callbacks } func (s *server) Fetch(ctx context.Context, req *discovery.DiscoveryRequest) (*discovery.DiscoveryResponse, error) { if s.callbacks != nil { if err := s.callbacks.OnFetchRequest(ctx, req); err != nil { return nil, err } } resp, err := s.cache.Fetch(ctx, req) if err != nil { return nil, err } if resp == nil { return nil, errors.New("missing response") } out, err := resp.GetDiscoveryResponse() if s.callbacks != nil { s.callbacks.OnFetchResponse(req, out) } return out, err }