From 8f87541a64dc4d216c034d9c0783bb62f34c5d0c Mon Sep 17 00:00:00 2001 From: netkas Date: Tue, 17 Sep 2024 15:10:19 -0400 Subject: [PATCH] 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. --- src/ncc/Classes/NccExtension/NccCompiler.php | 10 ++--- src/ncc/Classes/PackageWriter.php | 46 ++++++++++++++++---- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/ncc/Classes/NccExtension/NccCompiler.php b/src/ncc/Classes/NccExtension/NccCompiler.php index 1c4f9d4..2c62b57 100644 --- a/src/ncc/Classes/NccExtension/NccCompiler.php +++ b/src/ncc/Classes/NccExtension/NccCompiler.php @@ -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: diff --git a/src/ncc/Classes/PackageWriter.php b/src/ncc/Classes/PackageWriter.php index d17f8d0..fb6e5a1 100644 --- a/src/ncc/Classes/PackageWriter.php +++ b/src/ncc/Classes/PackageWriter.php @@ -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]); } /**