Refactor flag handling to use PackageFlags enum directly
Updated the NccCompiler and PackageWriter classes to utilize the PackageFlags enum directly rather than its values. This improves type safety and code readability, reducing the chances of runtime errors associated with invalid flag values.
This commit is contained in:
parent
6482d06ba2
commit
8f87541a64
2 changed files with 43 additions and 13 deletions
|
@ -119,7 +119,7 @@
|
|||
{
|
||||
// Add the static dependencies flag so that the package manager
|
||||
// Won't try to resolve the dependencies from the system.
|
||||
$package_writer->addFlag(PackageFlags::STATIC_DEPENDENCIES->value);
|
||||
$package_writer->addFlag(PackageFlags::STATIC_DEPENDENCIES);
|
||||
}
|
||||
|
||||
// Debugging information
|
||||
|
@ -264,19 +264,19 @@
|
|||
|
||||
if(isset($build_configuration->getOptions()[BuildConfigurationOptions::COMPRESSION->value]))
|
||||
{
|
||||
$package_writer->addFlag(PackageFlags::COMPRESSION->value);
|
||||
$package_writer->addFlag(PackageFlags::COMPRESSION);
|
||||
switch(strtolower($build_configuration->getOptions()[BuildConfigurationOptions::COMPRESSION->value]))
|
||||
{
|
||||
case BuildConfigurationOptions\CompressionOptions::HIGH->value:
|
||||
$package_writer->addFlag(PackageFlags::HIGH_COMPRESSION->value);
|
||||
$package_writer->addFlag(PackageFlags::HIGH_COMPRESSION);
|
||||
break;
|
||||
|
||||
case BuildConfigurationOptions\CompressionOptions::MEDIUM->value:
|
||||
$package_writer->addFlag(PackageFlags::MEDIUM_COMPRESSION->value);
|
||||
$package_writer->addFlag(PackageFlags::MEDIUM_COMPRESSION);
|
||||
break;
|
||||
|
||||
case BuildConfigurationOptions\CompressionOptions::LOW->value:
|
||||
$package_writer->addFlag(PackageFlags::LOW_COMPRESSION->value);
|
||||
$package_writer->addFlag(PackageFlags::LOW_COMPRESSION);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
namespace ncc\Classes;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use ncc\Enums\Flags\PackageFlags;
|
||||
use ncc\Enums\PackageDirectory;
|
||||
use ncc\Enums\PackageStructure;
|
||||
|
@ -153,7 +154,7 @@
|
|||
/**
|
||||
* Sets the package flags
|
||||
*
|
||||
* @param array $flags
|
||||
* @param string[]|PackageFlags[] $flags
|
||||
* @return void
|
||||
* @throws IOException
|
||||
*/
|
||||
|
@ -164,19 +165,39 @@
|
|||
throw new IOException('Cannot set flags after data has been written to the package');
|
||||
}
|
||||
|
||||
$this->headers[PackageStructure::FLAGS->value] = $flags;
|
||||
foreach($flags as $flag)
|
||||
{
|
||||
if(is_string($flag))
|
||||
{
|
||||
$flag = PackageFlags::tryFrom($flag);
|
||||
if($flag === null)
|
||||
{
|
||||
throw new InvalidArgumentException(sprintf('Unexpected flag: %s', $flag));
|
||||
}
|
||||
}
|
||||
|
||||
$this->headers[PackageStructure::FLAGS->value] = $flag->value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a flag to the package
|
||||
*
|
||||
* @param string $flag
|
||||
* @param PackageFlags|string $flag
|
||||
* @return void
|
||||
* @throws IOException
|
||||
*/
|
||||
// TODO: Package flags should use the PackageFlags enum directly.
|
||||
public function addFlag(string $flag): void
|
||||
public function addFlag(PackageFlags|string $flag): void
|
||||
{
|
||||
if(is_string($flag))
|
||||
{
|
||||
$flag = PackageFlags::tryFrom($flag);
|
||||
if($flag === null)
|
||||
{
|
||||
throw new InvalidArgumentException(sprintf('Unexpected flag: %s', $flag));
|
||||
}
|
||||
}
|
||||
|
||||
if($this->data_written)
|
||||
{
|
||||
throw new IOException('Cannot add a flag after data has been written to the package');
|
||||
|
@ -184,7 +205,7 @@
|
|||
|
||||
if(!in_array($flag, $this->headers[PackageStructure::FLAGS->value], true))
|
||||
{
|
||||
$this->headers[PackageStructure::FLAGS->value][] = $flag;
|
||||
$this->headers[PackageStructure::FLAGS->value][] = $flag->value;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -195,14 +216,23 @@
|
|||
* @return void
|
||||
* @throws IOException
|
||||
*/
|
||||
public function removeFlag(string $flag): void
|
||||
public function removeFlag(PackageFlags|string $flag): void
|
||||
{
|
||||
if(is_string($flag))
|
||||
{
|
||||
$flag = PackageFlags::tryFrom($flag);
|
||||
if($flag === null)
|
||||
{
|
||||
throw new InvalidArgumentException(sprintf('Unexpected flag: %s', $flag));
|
||||
}
|
||||
}
|
||||
|
||||
if($this->data_written)
|
||||
{
|
||||
throw new IOException('Cannot remove a flag after data has been written to the package');
|
||||
}
|
||||
|
||||
$this->headers[PackageStructure::FLAGS->value] = array_diff($this->headers[PackageStructure::FLAGS->value], [$flag]);
|
||||
$this->headers[PackageStructure::FLAGS->value] = array_diff($this->headers[PackageStructure::FLAGS->value], [$flag->value]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue