package xmpp

import (
	"fmt"

	"golang.org/x/xerrors"
)

type ConnError struct {
	frame xerrors.Frame
	err   error
	// Permanent will be true if error is not recoverable
	Permanent bool
}

func NewConnError(err error, permanent bool) ConnError {
	return ConnError{err: err, frame: xerrors.Caller(1), Permanent: permanent}
}

func (e ConnError) Format(s fmt.State, verb rune) {
	xerrors.FormatError(e, s, verb)
}

func (e ConnError) FormatError(p xerrors.Printer) error {
	e.frame.Format(p)
	return e.err
}

func (e ConnError) Error() string {
	return fmt.Sprint(e)
}

func (e ConnError) Unwrap() error { return e.err }