Behaviour for validating incoming params
setup(term()) :: Macro.t()
validate(params :: any(), schema :: any()) :: {:ok, any()} | {:error, any()}