stty/error.go
2025-05-08 11:26:47 +03:00

82 lines
1.5 KiB
Go

package stty
import(
"fmt"
)
type unwraperr interface {
Unwrap() error
}
type unwraperrs interface {
Unwrap() []error
}
func isUnwrapable(err error) bool {
_, ok1 := err.(unwraperr)
_, ok2 := err.(unwraperrs)
return ok1 || ok2
}
func enshureUnwrapable(err error) error {
if isUnwrapable(err) {
return err
}
return fmt.Errorf(err.Error())
}
func filterNilErrors(errs []error) (notNilErrs []error) {
for _, err := range errs {
if err != nil {
notNilErrs = append(notNilErrs, err)
}
}
return notNilErrs
}
func Join(errs ...error) (result error) {
fmt.Println(errs)
errs = filterNilErrors(errs)
fmt.Println(errs)
if len(errs) == 0 {
return nil
}
for index, err := range errs {
err = enshureUnwrapable(err)
if index == 0 {
result = err
} else {
result = fmt.Errorf("%w: %w", result, err)
}
}
return result
}
func ERR_NOT_TTY() error {
return fmt.Errorf("File is not a tty")
}
func ERR_CANNOT_OPEN_FILE() error {
return fmt.Errorf("Can not open file")
}
func ERR_NO_WRITE_ACCESS() error {
return fmt.Errorf("No write access")
}
func ERR_STTY_MISSING() error {
return fmt.Errorf("Stty is missing")
}
func ERR_BAUDRATE_NOT_SUPPORTED() error {
return fmt.Errorf("Selected baudrate is not supported")
}
func ERR_SET_BAUDRATE_FAILED() error {
return fmt.Errorf("Failed to set baudrate using stty")
}
func ERR_CHECK_BAUDRATE_FAILED() error {
return fmt.Errorf("Failed to check baudrate using stty")
}