func computeLen[K any]()

in pkg/ottl/ottlfuncs/func_len.go [41:110]


func computeLen[K any](target ottl.Getter[K]) ottl.ExprFunc[K] {
	return func(ctx context.Context, tCtx K) (any, error) {
		val, err := target.Get(ctx, tCtx)
		if err != nil {
			return nil, err
		}

		switch valType := val.(type) {
		case pcommon.Value:
			switch valType.Type() {
			case pcommon.ValueTypeStr:
				return int64(len(valType.Str())), nil
			case pcommon.ValueTypeSlice:
				return int64(valType.Slice().Len()), nil
			case pcommon.ValueTypeMap:
				return int64(valType.Map().Len()), nil
			}
			return nil, errors.New(typeError)
		case pcommon.Map:
			return int64(valType.Len()), nil
		case pcommon.Slice:
			return int64(valType.Len()), nil

		case plog.LogRecordSlice:
			return int64(valType.Len()), nil
		case plog.ResourceLogsSlice:
			return int64(valType.Len()), nil
		case plog.ScopeLogsSlice:
			return int64(valType.Len()), nil

		case pmetric.ExemplarSlice:
			return int64(valType.Len()), nil
		case pmetric.ExponentialHistogramDataPointSlice:
			return int64(valType.Len()), nil
		case pmetric.HistogramDataPointSlice:
			return int64(valType.Len()), nil
		case pmetric.MetricSlice:
			return int64(valType.Len()), nil
		case pmetric.NumberDataPointSlice:
			return int64(valType.Len()), nil
		case pmetric.ResourceMetricsSlice:
			return int64(valType.Len()), nil
		case pmetric.ScopeMetricsSlice:
			return int64(valType.Len()), nil
		case pmetric.SummaryDataPointSlice:
			return int64(valType.Len()), nil
		case pmetric.SummaryDataPointValueAtQuantileSlice:
			return int64(valType.Len()), nil

		case ptrace.ResourceSpansSlice:
			return int64(valType.Len()), nil
		case ptrace.ScopeSpansSlice:
			return int64(valType.Len()), nil
		case ptrace.SpanEventSlice:
			return int64(valType.Len()), nil
		case ptrace.SpanLinkSlice:
			return int64(valType.Len()), nil
		case ptrace.SpanSlice:
			return int64(valType.Len()), nil
		}

		v := reflect.ValueOf(val)
		switch v.Kind() {
		case reflect.String, reflect.Map, reflect.Slice:
			return int64(v.Len()), nil
		}

		return nil, errors.New(typeError)
	}
}