nulib-base/php/src/output/_TMessenger.php

63 lines
1.5 KiB
PHP

<?php
namespace nulib\output;
use nulib\app\app;
use nulib\exceptions;
use nulib\output\std\NullMessenger;
use nulib\output\std\ProxyMessenger;
trait _TMessenger {
protected static ?IMessenger $msg = null;
static function set_messenger(IMessenger $msg, bool $replace=false): IMessenger {
if (self::$msg instanceof NullMessenger) self::$msg = null;
if ($replace || self::$msg === null) return self::$msg = $msg;
elseif (self::$msg instanceof ProxyMessenger) self::$msg->addMessenger($msg);
else self::$msg = new ProxyMessenger(self::$msg);
return $msg;
}
static function get(): IMessenger {
return self::$msg ??= new NullMessenger();
}
static function set_verbosity(string $verbosity): void {
$msg = self::get();
switch ($verbosity) {
case "Q":
case "silent":
$msg->resetParams([
"min_level" => self::NONE,
]);
break;
case "q":
case "quiet":
$msg->resetParams([
"min_level" => self::MAJOR,
]);
break;
case "n":
case "normal":
$msg->resetParams([
"min_level" => self::NORMAL,
]);
break;
case "v":
case "verbose":
$msg->resetParams([
"min_level" => self::MINOR,
]);
break;
case "D":
case "debug":
app::set_debug();
$msg->resetParams([
"min_level" => self::DEBUG,
]);
break;
default:
throw exceptions::forbidden_value($verbosity, "verbosity", ["silent", "quiet", "normal", "verbose", "debug"]);
}
}
}