func newConfigFromContents()

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
}