MCPcopy Create free account
hub / github.com/cel-expr/cel-go / ProtoAsValue

Function ProtoAsValue

cel/io.go:306–364  ·  view source on GitHub ↗

ProtoAsValue converts between cel.expr.Value and ref.Val.

(adapter types.Adapter, v *celpb.Value)

Source from the content-addressed store, hash-verified

304
305// ProtoAsValue converts between cel.expr.Value and ref.Val.
306func ProtoAsValue(adapter types.Adapter, v *celpb.Value) (ref.Val, error) {
307 switch v.Kind.(type) {
308 case *celpb.Value_NullValue:
309 return types.NullValue, nil
310 case *celpb.Value_BoolValue:
311 return types.Bool(v.GetBoolValue()), nil
312 case *celpb.Value_Int64Value:
313 return types.Int(v.GetInt64Value()), nil
314 case *celpb.Value_Uint64Value:
315 return types.Uint(v.GetUint64Value()), nil
316 case *celpb.Value_DoubleValue:
317 return types.Double(v.GetDoubleValue()), nil
318 case *celpb.Value_StringValue:
319 return types.String(v.GetStringValue()), nil
320 case *celpb.Value_BytesValue:
321 return types.Bytes(v.GetBytesValue()), nil
322 case *celpb.Value_ObjectValue:
323 any := v.GetObjectValue()
324 msg, err := anypb.UnmarshalNew(any, proto.UnmarshalOptions{DiscardUnknown: true})
325 if err != nil {
326 return nil, err
327 }
328 return adapter.NativeToValue(msg), nil
329 case *celpb.Value_MapValue:
330 m := v.GetMapValue()
331 entries := make(map[ref.Val]ref.Val)
332 for _, entry := range m.Entries {
333 key, err := ProtoAsValue(adapter, entry.Key)
334 if err != nil {
335 return nil, err
336 }
337 pb, err := ProtoAsValue(adapter, entry.Value)
338 if err != nil {
339 return nil, err
340 }
341 entries[key] = pb
342 }
343 return adapter.NativeToValue(entries), nil
344 case *celpb.Value_ListValue:
345 l := v.GetListValue()
346 elts := make([]ref.Val, len(l.Values))
347 for i, e := range l.Values {
348 rv, err := ProtoAsValue(adapter, e)
349 if err != nil {
350 return nil, err
351 }
352 elts[i] = rv
353 }
354 return adapter.NativeToValue(elts), nil
355 case *celpb.Value_TypeValue:
356 typeName := v.GetTypeValue()
357 tv, ok := typeNameToTypeValue[typeName]
358 if ok {
359 return tv, nil
360 }
361 return types.NewObjectTypeValue(typeName), nil
362 }
363 return nil, errors.New("unknown value")

Callers 3

createTestInputFromPBMethod · 0.92
exprValueToRefValueFunction · 0.92
AlphaProtoAsValueFunction · 0.85

Calls 9

BoolTypeAlias · 0.92
IntTypeAlias · 0.92
UintTypeAlias · 0.92
DoubleTypeAlias · 0.92
StringTypeAlias · 0.92
BytesTypeAlias · 0.92
NewObjectTypeValueFunction · 0.92
NewMethod · 0.80
NativeToValueMethod · 0.65

Tested by 1

exprValueToRefValueFunction · 0.74