provenant-cli 1.0.2

Fast Rust scanner for licenses, copyrights, package metadata, SBOMs, and provenance data.
Documentation
// SPDX-FileCopyrightText: Provenant contributors
// SPDX-License-Identifier: Apache-2.0

use std::path::{Path, PathBuf};

use crate::models::Package;

/// The directory of a Composer package's manifest, whose subtree the package
/// owns. Registered as a containment assigner in [`super::resource_assign`].
pub(super) fn composer_package_root(package: &Package) -> Option<PathBuf> {
    package
        .datafile_paths
        .iter()
        .find(|path| {
            Path::new(path)
                .file_name()
                .and_then(|name| name.to_str())
                .is_some_and(is_composer_manifest_filename)
        })
        .and_then(|path| Path::new(path).parent())
        .map(Path::to_path_buf)
}

fn is_composer_manifest_filename(name: &str) -> bool {
    name == "composer.json"
        || name.ends_with(".composer.json")
        || (name.starts_with("composer.") && name.ends_with(".json"))
}