use crate::func::{args::ArgError, Return};
use alloc::borrow::Cow;
use derive_more::derive::{Display, Error, From};
#[derive(Debug, Error, Display, PartialEq, From)]
pub enum FunctionError {
ArgError(ArgError),
#[display("expected {expected} arguments but received {received}")]
ArgCountMismatch { expected: usize, received: usize },
}
pub type FunctionResult<'a> = Result<Return<'a>, FunctionError>;
#[derive(Debug, Error, Display, PartialEq)]
pub enum FunctionRegistrationError {
#[display("a function has already been registered with name {_0:?}")]
#[error(ignore)]
DuplicateName(Cow<'static, str>),
#[display("function name is missing")]
MissingName,
}