func castToAttribute()

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()))}
	}
}