// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // common-errors.go package expr import ( "fmt" ) func errTooFewParams(funcName string, minArgs, maxArgs, argCount int) (err error) { if maxArgs < 0 { err = fmt.Errorf("%s(): too few params -- expected %d or more, got %d", funcName, minArgs, argCount) } else { err = fmt.Errorf("%s(): too few params -- expected %d, got %d", funcName, minArgs, argCount) } return } func errTooMuchParams(funcName string, maxArgs, argCount int) (err error) { err = fmt.Errorf("%s(): too much params -- expected %d, got %d", funcName, maxArgs, argCount) return } // --- General errors func errCantConvert(funcName string, value any, kind string) error { if typer, ok := value.(Typer); ok { return fmt.Errorf("%s(): can't convert %s to %s", funcName, typer.TypeName(), kind) } else { return fmt.Errorf("%s(): can't convert %T to %s", funcName, value, kind) } } func errExpectedGot(funcName string, kind string, value any) error { return fmt.Errorf("%s() expected %s, got %T (%v)", funcName, kind, value, value) } func errFuncDivisionByZero(funcName string) error { return fmt.Errorf("%s(): division by zero", funcName) } func errDivisionByZero() error { return fmt.Errorf("division by zero") } // --- Parameter errors // func errOneParam(funcName string) error { // return fmt.Errorf("%s() requires exactly one param", funcName) // } func errMissingRequiredParameter(funcName, paramName string) error { return fmt.Errorf("%s() missing required parameter %q", funcName, paramName) } func errInvalidParameterValue(funcName, paramName string, paramValue any) error { return fmt.Errorf("%s() invalid value %T (%v) for parameter %q", funcName, paramValue, paramValue, paramName) } func errWrongParamType(funcName, paramName, paramType string, paramValue any) error { return fmt.Errorf("%s() the %q parameter must be a %s, got a %T (%v)", funcName, paramName, paramType, paramValue, paramValue) }