plugins = array_flip($plugins); $this->isWhitelist = $whitelist; } /** * @return string[] */ public function getPlugins() : array{ return array_flip($this->plugins); } public function isWhitelist() : bool{ return $this->isWhitelist; } /** * Returns whether the given name is permitted by this graylist. */ public function isAllowed(string $name) : bool{ return $this->isWhitelist() === isset($this->plugins[$name]); } /** * @param mixed[] $array */ public static function fromArray(array $array) : PluginGraylist{ $validator = new Validator( new Key("mode", new In(['whitelist', 'blacklist'], true), true), new Key("plugins", new AllOf(new ArrayType(), new Each(new StringType())), true) ); $validator->setName('plugin_list.yml'); try{ $validator->assert($array); }catch(NestedValidationException $e){ throw new \InvalidArgumentException($e->getFullMessage(), 0, $e); } return new PluginGraylist($array["plugins"], $array["mode"] === 'whitelist'); } /** * @return mixed[] * @phpstan-return array */ public function toArray() : array{ return [ "mode" => $this->isWhitelist ? 'whitelist' : 'blacklist', "plugins" => $this->plugins ]; } }