self::MINOR, self::TECH => self::MINOR, self::EXCEPTION => self::MINOR, ]; # Destination const DEFAULT_DEST = null; protected static function _type(?int $result, ?int $type, int $default_type): int { if ($type === null) $type = $default_type; if (($type & IMessenger::RESULT_MASK) === 0 && $result !== null) $type += $result; if (($type & IMessenger::DEST_MASK) === 0) $type += static::DEFAULT_DEST; return $type; } static function _error(?int $result=null, ?int $type=null): int { return self::_type($result, $type, self::ERROR); } static function _warning(?int $result=null, ?int $type=null): int { return self::_type($result, $type, self::WARNING); } static function _info(?int $result=null, ?int $type=null): int { return self::_type($result, $type, self::INFO); } static function _debug(?int $result=null, ?int $type=null): int { return self::_type($result, $type, self::DEBUG); } protected static function _level(?int $level, int $default_level): int { if ($level === null) $level = $default_level; return $level; } static function _critical(?int $level=null): int { return self::_level($level, self::CRITICAL); } static function _major(?int $level=null): int { return self::_level($level, self::MAJOR); } static function _normal(?int $level=null): int { return self::_level($level, self::NORMAL); } static function _minor(?int $level=null): int { return self::_level($level, self::MINOR); } static final function section($title=null, ?int $level=null): IMessenger { return self::get()->startSection($title, self::_info(), self::_major($level)); } static final function group($prefix, ?int $count=null, ?int $level=null): IMessenger { return self::get()->startGroup($prefix, $count, self::_info(), self::_major($level)); } static final function action($message, $result=null, ?array $args=null, ?int $level=null): IMessenger { return self::get()->action($message, $result, $args, self::_info(), self::_major($level)); } static final function aresult($result, ?array $args=null, $message=null): IMessenger { return self::get()->aresult($result, $args, $message, self::_info()); } static final function astep($message=null): IMessenger { return self::get()->astep($message, self::_info()); } static final function asuccess($message=null): IMessenger { return self::get()->asuccess($message, self::_info()); } static final function afailure($message=null, ?Throwable $e=null): IMessenger { return self::get()->afailure($message, $e, self::_info()); } static final function end(bool $all=false): IMessenger { return self::get()->end($all); } static final function error($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_error(), self::_major($level)); } static final function warning($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_warning(), self::_major($level)); } static final function note($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_info(), self::_critical($level)); } static final function info($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_info(), self::_major($level)); } static final function step($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_info(self::NEUTRAL), self::_major($level)); } static final function success($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_info(self::SUCCESS), self::_major($level)); } static final function failure($message, ?int $level=null): IMessenger { return self::get()->addMessage($message, self::_info(self::FAILURE), self::_major($level)); } static final function debug($message, ?int $level=null, ?int $result=null): IMessenger { return self::get()->addMessage($message, self::_debug($result), self::_major($level)); } static final function print($message): IMessenger { return self::get()->addMessage([self::USER => $message], self::_info(), self::_normal()); } static final function die($message): void { throw new ExitException(1, $message); } }