44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package filter
|
|
|
|
import (
|
|
"reflect"
|
|
|
|
"google.golang.org/protobuf/types/known/structpb"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
|
)
|
|
|
|
// WellKnownTypeFilterHook is passed to bexpr to treat all proto well-known
|
|
// types as the types they wrap for comparison.
|
|
func WellKnownTypeFilterHook(v reflect.Value) reflect.Value {
|
|
if !v.CanInterface() {
|
|
return v
|
|
}
|
|
ret := v.Interface()
|
|
switch pm := v.Interface().(type) {
|
|
case *wrapperspb.BoolValue:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.BytesValue:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.StringValue:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.DoubleValue:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.FloatValue:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.Int32Value:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.Int64Value:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.UInt32Value:
|
|
ret = pm.GetValue()
|
|
case *wrapperspb.UInt64Value:
|
|
ret = pm.GetValue()
|
|
case *structpb.Struct:
|
|
ret = pm.AsMap()
|
|
case *timestamppb.Timestamp:
|
|
ret = pm.AsTime()
|
|
}
|
|
return reflect.ValueOf(ret)
|
|
}
|