package errors

import (
	"fmt"
)

var (
	_ Unknown = (*UnknownError)(nil)
	_ Error   = (*UnknownError)(nil)
)

type Unknown interface {
	error
	IsUnknown()
}

type UnknownError struct {
	*CaosError
}

func ThrowUnknown(parent error, id, message string) error {
	return &UnknownError{CreateCaosError(parent, id, message)}
}

func ThrowUnknownf(parent error, id, format string, a ...interface{}) error {
	return ThrowUnknown(parent, id, fmt.Sprintf(format, a...))
}

func (err *UnknownError) IsUnknown() {}

func IsUnknown(err error) bool {
	_, ok := err.(Unknown)
	return ok
}