You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
phpcommandline/src/CommandLine/Argument/Value/Value.php

82 lines
2.2 KiB
PHP

<?php
/**
* Déclaration de CommandLine\Argument\Value\Value
*/
namespace jrosset\CommandLine\Argument\Value;
use jrosset\CommandLine\Argument\IArgumentValueDescription;
use jrosset\CommandLine\Argument\Parser\IValueParser;
use jrosset\CommandLine\Argument\ParseResult;
use jrosset\CommandLine\Exception\IncorrectParse;
use RangeException;
/**
* Argument de type "valeur"
*
* @package CommandLine\Argument\Value
*/
class Value extends ValueAbstract implements IArgumentValueDescription {
/**
* @var IValueParser Parseur pour la valeur
*/
protected IValueParser $valueParser;
/**
* Crée un nouvel argument de type valeur
*
* @param string $name Le nom
* @param string|null $description La description
* @param IValueParser $valueParser Le parseur de valeur.
* @param boolean $optional Valeur optionnelle ?
*/
public function __construct (string $name, ?string $description, IValueParser $valueParser, bool $optional) {
parent::__construct($name, $description, $optional);
$this->setValueParser($valueParser);
}
/**
* @inheritDoc
*/
public function parse (array $args): ?ParseResult {
try {
return new ParseResult($this->valueParser->parseValue($args[0]), 1);
}
catch (RangeException $e) {
throw new IncorrectParse('Échec du parsage de la valeur "' . $args[0] . '"', 0, $e);
}
}
/**
* @inheritDoc
*/
public function getValueDescription (): string {
return $this->valueParser->getValueDescription();
}
/**
* Le parseur de valeur.
*
* @return IValueParser Le parseur.
*
* @see $valueParser
*
* @noinspection PhpUnused
*/
public function getValueParser (): IValueParser {
return $this->valueParser;
}
/**
* Définit le parseur de valeur
*
* @param IValueParser $valueParser Le parseur
*
* @return $this
*
* @see $valueParser
*/
public function setValueParser (IValueParser $valueParser): self {
$this->valueParser = $valueParser;
return $this;
}
}