package ident

// IdentError is an ErrorResponse received from a ident server, wrapped as a Go
// error type.
// When using errors.Is/errors.As against an IdentError, the Inner field
// controls the matching behaviour.
//  - If set, the error will match if the tested error is an IdentError with
//    same ErrorResponse as the IdentError tested against
//  - If not set, the error will always match if the tested error is any
//    IdentError.
//
// For example:
//    errors.Is(err, &IdentError{}
// will be true if err is any *IdentError, but:
//    errors.Is(err, &IdentError{NoUser})
// will be true only if err is an *IdentError with an Inner NoUser.
type IdentError struct {
	// Inner is the ErrorResponse contained by this error.
	Inner ErrorResponse
}

func (e *IdentError) Error() string {
	return string(e.Inner)
}

func (e *IdentError) Is(target error) bool {
	t, ok := target.(*IdentError)
	if !ok {
		return false
	}
	if t.Inner == "" {
		return true
	}
	if t.Inner == e.Inner {
		return true
	}
	return false
}
