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("%v",err) } 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) { errs = filterNilErrors(errs) if len(errs) == 0 { return nil } for index, err := range errs { fmt.Println(isUnwrapable(err), err.Error()) err = enshureUnwrapable(err) fmt.Println(isUnwrapable(err), err.Error()) 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") }