diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-06 04:59:34 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-06 04:59:34 +0900 |
| commit | 0b227a4c623c72c155b1622674b78ca5cc0c4f8b (patch) | |
| tree | 89516c5d863bb83324dae7f78fe1d6284cf3fe44 /crates/shirabe-spdx-licenses | |
| parent | fabc0719224d194c6ea1ea7d8f6e9f0175ca7af5 (diff) | |
| download | php-shirabe-0b227a4c623c72c155b1622674b78ca5cc0c4f8b.tar.gz php-shirabe-0b227a4c623c72c155b1622674b78ca5cc0c4f8b.tar.zst php-shirabe-0b227a4c623c72c155b1622674b78ca5cc0c4f8b.zip | |
refactor(spdx-licenses): return a dedicated type from getLicenseByIdentifier
PHP hands back a positional array, so every caller had to reach into a
PhpMixed list by index and fall back to a default when an element was
missing or the wrong variant -- fallbacks that could never fire, since
the list shape is fixed. LicenseMetadata names the four elements and
makes the accesses total.
This also drops the crate's last use of PhpMixed, and with it the
dependency on shirabe-php-shim.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-spdx-licenses')
| -rw-r--r-- | crates/shirabe-spdx-licenses/Cargo.toml | 1 | ||||
| -rw-r--r-- | crates/shirabe-spdx-licenses/src/spdx_licenses.rs | 29 |
2 files changed, 15 insertions, 15 deletions
diff --git a/crates/shirabe-spdx-licenses/Cargo.toml b/crates/shirabe-spdx-licenses/Cargo.toml index 014673e1..fc421f02 100644 --- a/crates/shirabe-spdx-licenses/Cargo.toml +++ b/crates/shirabe-spdx-licenses/Cargo.toml @@ -4,7 +4,6 @@ version.workspace = true edition.workspace = true [dependencies] -shirabe-php-shim.workspace = true indexmap.workspace = true serde_json.workspace = true diff --git a/crates/shirabe-spdx-licenses/src/spdx_licenses.rs b/crates/shirabe-spdx-licenses/src/spdx_licenses.rs index 36d87a1e..82f2ae70 100644 --- a/crates/shirabe-spdx-licenses/src/spdx_licenses.rs +++ b/crates/shirabe-spdx-licenses/src/spdx_licenses.rs @@ -1,7 +1,6 @@ //! ref: composer/vendor/composer/spdx-licenses/src/SpdxLicenses.php use indexmap::IndexMap; -use shirabe_php_shim::PhpMixed; // PHP reads the resource files from `dirname(__DIR__) . '/res'` at runtime via // file_get_contents. Composer's res directory ships with the vendored package; embed it at compile @@ -31,6 +30,14 @@ pub struct SpdxLicenses { exceptions_by_length_desc: Vec<String>, } +#[derive(Debug)] +pub struct LicenseMetadata { + pub name: String, + pub is_osi_approved: bool, + pub url: String, + pub is_deprecated_license_id: bool, +} + impl Default for SpdxLicenses { fn default() -> Self { Self::new() @@ -53,24 +60,18 @@ impl SpdxLicenses { } /// Returns license metadata by license identifier. - /// - /// The returned list is in the form of: - /// [ 0 => full name, 1 => osi certified, 2 => link to license text, 3 => deprecation status ] - pub fn get_license_by_identifier(&self, identifier: &str) -> Option<PhpMixed> { + pub fn get_license_by_identifier(&self, identifier: &str) -> Option<LicenseMetadata> { let key = identifier.to_lowercase(); let (identifier, name, is_osi_approved, is_deprecated_license_id) = self.licenses.get(&key)?; - Some(PhpMixed::List(vec![ - PhpMixed::String(name.clone()), - PhpMixed::Bool(*is_osi_approved), - PhpMixed::String(format!( - "https://spdx.org/licenses/{}.html#licenseText", - identifier - )), - PhpMixed::Bool(*is_deprecated_license_id), - ])) + Some(LicenseMetadata { + name: name.clone(), + is_osi_approved: *is_osi_approved, + url: format!("https://spdx.org/licenses/{}.html#licenseText", identifier), + is_deprecated_license_id: *is_deprecated_license_id, + }) } pub fn validate(&self, license: &str) -> bool { |
