func convertToProtoValInternal()

in pkg/gcv/result.go [263:307]


func convertToProtoValInternal(from interface{}) *structpb.Value {
	if from == nil {
		return nil
	}
	switch val := from.(type) {
	case map[string]interface{}:
		fields := map[string]*structpb.Value{}
		for k, v := range val {
			fields[k] = convertToProtoValInternal(v)
		}
		return &structpb.Value{
			Kind: &structpb.Value_StructValue{
				StructValue: &structpb.Struct{
					Fields: fields,
				},
			}}

	case []interface{}:
		vals := make([]*structpb.Value, len(val))
		for idx, v := range val {
			vals[idx] = convertToProtoValInternal(v)
		}
		return &structpb.Value{
			Kind: &structpb.Value_ListValue{
				ListValue: &structpb.ListValue{Values: vals},
			},
		}

	case string:
		return &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: val}}
	case int:
		return &structpb.Value{Kind: &structpb.Value_NumberValue{NumberValue: float64(val)}}
	case int64:
		return &structpb.Value{Kind: &structpb.Value_NumberValue{NumberValue: float64(val)}}
	case float64:
		return &structpb.Value{Kind: &structpb.Value_NumberValue{NumberValue: val}}
	case float32:
		return &structpb.Value{Kind: &structpb.Value_NumberValue{NumberValue: float64(val)}}
	case bool:
		return &structpb.Value{Kind: &structpb.Value_BoolValue{BoolValue: val}}

	default:
		panic(&convertFailed{errors.Errorf("Unhandled type %v (%s)", from, reflect.TypeOf(from).String())})
	}
}