1/*
2 *
3 * Copyright 2020 gRPC authors.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 */
18
19package lrs
20
21import (
22	"encoding/json"
23	"fmt"
24
25	internalserviceconfig "google.golang.org/grpc/internal/serviceconfig"
26	"google.golang.org/grpc/serviceconfig"
27	"google.golang.org/grpc/xds/internal"
28)
29
30type lbConfig struct {
31	serviceconfig.LoadBalancingConfig
32	ClusterName                string
33	EdsServiceName             string
34	LrsLoadReportingServerName string
35	Locality                   *internal.LocalityID
36	ChildPolicy                *internalserviceconfig.BalancerConfig
37}
38
39func parseConfig(c json.RawMessage) (*lbConfig, error) {
40	var cfg lbConfig
41	if err := json.Unmarshal(c, &cfg); err != nil {
42		return nil, err
43	}
44	if cfg.ClusterName == "" {
45		return nil, fmt.Errorf("required ClusterName is not set in %+v", cfg)
46	}
47	if cfg.LrsLoadReportingServerName == "" {
48		return nil, fmt.Errorf("required LrsLoadReportingServerName is not set in %+v", cfg)
49	}
50	if cfg.Locality == nil {
51		return nil, fmt.Errorf("required Locality is not set in %+v", cfg)
52	}
53	return &cfg, nil
54}
55