in grpc-xds/greeter-go/pkg/xdsclient/bootstrap/bootstrap.go [131:170]
func newConfigFromContents(data []byte) (*Config, error) {
config := &Config{}
var jsonData map[string]json.RawMessage
if err := json.Unmarshal(data, &jsonData); err != nil {
return nil, fmt.Errorf("xds: failed to parse bootstrap config: %w", err)
}
var node *v3corepb.Node
m := protojson.UnmarshalOptions{
AllowPartial: true,
DiscardUnknown: true,
}
for k, v := range jsonData {
switch k {
case "node":
node = &v3corepb.Node{}
if err := m.Unmarshal(v, node); err != nil {
return nil, fmt.Errorf("xds: jsonpb.Unmarshal(%v) for field %q failed during bootstrap: %w", string(v), k, err)
}
case "certificate_providers":
var providerInstances map[string]json.RawMessage
if err := json.Unmarshal(v, &providerInstances); err != nil {
return nil, fmt.Errorf("xds: json.Unmarshal(%v) for field %q failed during bootstrap: %w", string(v), k, err)
}
configs, err := parseCertificateProviders(providerInstances)
if err != nil {
return nil, err
}
config.CertProviderConfigs = configs
}
}
if node == nil {
node = &v3corepb.Node{}
}
config.NodeProto = node
return config, nil
}