// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package semconv // import "go.opentelemetry.io/otel/semconv/v1.37.0"

import (
	

	
)

// ErrorType returns an [attribute.KeyValue] identifying the error type of err.
//
// If err is nil, the returned attribute has the default value
// [ErrorTypeOther].
//
// If err's type has the method
//
//	ErrorType() string
//
// then the returned attribute has the value of err.ErrorType(). Otherwise, the
// returned attribute has a value derived from the concrete type of err.
//
// The key of the returned attribute is [ErrorTypeKey].
func ( error) attribute.KeyValue {
	if  == nil {
		return ErrorTypeOther
	}

	return ErrorTypeKey.String(errorType())
}

func errorType( error) string {
	var  string
	if ,  := .(interface{ () string });  {
		// Prioritize the ErrorType method if available.
		 = .()
	}
	if  == "" {
		// Fallback to reflection if the ErrorType method is not supported or
		// returns an empty value.

		 := reflect.TypeOf()
		,  := .PkgPath(), .Name()
		if  != "" &&  != "" {
			 =  + "." + 
		} else {
			// The type has no package path or name (predeclared, not-defined,
			// or alias for a not-defined type).
			//
			// This is not guaranteed to be unique, but is a best effort.
			 = .String()
		}
	}
	return 
}