public function __construct($config)
{
if (!isset($config['name'])) {
$config['name'] = $this->tryInferName();
}
Config::validate($config, ['name' => Config::NAME | Config::REQUIRED, 'values' => Config::arrayOf(['name' => Config::NAME | Config::REQUIRED, 'value' => Config::ANY, 'deprecationReason' => Config::STRING, 'description' => Config::STRING], Config::KEY_AS_NAME | Config::MAYBE_NAME), 'description' => Config::STRING]);
$this->name = $config['name'];
$this->description = isset($config['description']) ? $config['description'] : null;
$this->values = [];
if (!empty($config['values'])) {
foreach ($config['values'] as $name => $value) {
if (!is_array($value)) {
if (is_string($name)) {
$value = ['name' => $name, 'value' => $value];
} else {
if (is_int($name) && is_string($value)) {
$value = ['name' => $value, 'value' => $value];
}
}
}
// value will be equal to name only if 'value' is not set in definition
$this->values[] = new EnumValueDefinition($value + ['name' => $name, 'value' => $name]);
}
}
}