in tracing/impl/stackdriver_tracer.go [153:177]
func castToAttribute(key string, value interface{}) []trace.Attribute {
switch v := reflect.ValueOf(value); v.Kind() {
case reflect.Bool:
return []trace.Attribute{trace.BoolAttribute(key, v.Bool())}
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return []trace.Attribute{trace.Int64Attribute(key, v.Int())}
case reflect.Float32, reflect.Float64:
return []trace.Attribute{trace.Float64Attribute(key, v.Float())}
case reflect.String:
chunks := chunkString(v.String(), 256)
attrs := []trace.Attribute{}
for i, chunk := range chunks {
var k string
if i == 0 {
k = key
} else {
k = key + "." + strconv.Itoa(i)
}
attrs = append(attrs, trace.StringAttribute(k, chunk))
}
return attrs
default:
return []trace.Attribute{trace.StringAttribute(key, fmt.Sprintf("castToAttribute not implemented for type %+v", v.Kind()))}
}
}