Skip to main content

PackageParser

Trait PackageParser 

Source
pub trait PackageParser {
    const PACKAGE_TYPE: PackageType;

    // Required methods
    fn extract_packages(path: &Path) -> Vec<PackageData>;
    fn is_match(path: &Path) -> bool;

    // Provided method
    fn extract_first_package(path: &Path) -> PackageData { ... }
}
Expand description

Package parser trait for extracting metadata from package manifest files.

Each parser implementation handles a specific package manager/ecosystem (npm, Maven, Python, Cargo, etc.) and extracts standardized metadata into PackageData structures compatible with ScanCode Toolkit JSON output format.

§Implementation Guide

Implementors must provide:

  • PACKAGE_TYPE: Package URL (purl) type identifier (e.g., “npm”, “pypi”, “maven”)
  • is_match(): Returns true if the given file path matches this parser’s expected format
  • extract_packages(): Parses the file and returns all extracted package metadata

§Error Handling

Parsers should handle errors gracefully by returning default/empty PackageData and logging warnings rather than panicking. This allows the scan to continue processing other files even when individual files fail to parse.

§Example

use provenant::models::{PackageData, PackageType};
use provenant::parsers::PackageParser;
use std::path::Path;

pub struct MyParser;

impl PackageParser for MyParser {
    const PACKAGE_TYPE: PackageType = PackageType::Npm;

    fn is_match(path: &Path) -> bool {
        path.file_name().is_some_and(|name| name == "package.json")
    }

    fn extract_packages(path: &Path) -> Vec<PackageData> {
        // Parse file and return metadata
        // On error, log warning and return default
        vec![PackageData::default()]
    }
}

Required Associated Constants§

Source

const PACKAGE_TYPE: PackageType

Package URL type identifier for this parser (e.g., PackageType::Npm, PackageType::Pypi).

Required Methods§

Source

fn extract_packages(path: &Path) -> Vec<PackageData>

Extracts all packages from the given file path.

Returns a vector of PackageData structures containing all extracted metadata including name, version, dependencies, licenses, etc. Most parsers return a single-element vector, but some (e.g., Bazel BUILD, Buck BUCK, Debian control) can contain multiple packages in a single file.

On parse errors, returns a vector with a default PackageData with minimal or no fields populated.

Source

fn is_match(path: &Path) -> bool

Checks if the given file path matches this parser’s expected format.

Returns true if the file should be handled by this parser based on filename, extension, or path patterns. Used by the scanner to route files to appropriate parsers.

Provided Methods§

Source

fn extract_first_package(path: &Path) -> PackageData

Returns the first package from extract_packages(), or a default PackageData if the file contains no packages.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl PackageParser for AboutFileParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::About

Source§

impl PackageParser for AlpineApkParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for AlpineApkbuildParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for AlpineInstalledParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for AndroidApkRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Android

Source§

impl PackageParser for AndroidLibraryRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::AndroidLib

Source§

impl PackageParser for AppleDmgRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Dmg

Source§

impl PackageParser for ArchPkginfoParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for ArchSrcinfoParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for AutotoolsConfigureParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Autotools

Source§

impl PackageParser for Axis2MarRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Axis2

Source§

impl PackageParser for Axis2ModuleXmlRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Axis2

Source§

impl PackageParser for BazelBuildParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Bazel

Source§

impl PackageParser for BazelModuleParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Bazel

Source§

impl PackageParser for BowerJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Bower

Source§

impl PackageParser for BuckBuildParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Buck

Source§

impl PackageParser for BuckMetadataBzlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Buck

Source§

impl PackageParser for BunLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Npm

Source§

impl PackageParser for BunLockbParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Npm

Source§

impl PackageParser for CabArchiveRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cab

Source§

impl PackageParser for CargoLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cargo

Source§

impl PackageParser for CargoParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cargo

Source§

impl PackageParser for CentralPackageManagementPropsParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for ChefMetadataJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Chef

Source§

impl PackageParser for ChefMetadataRbParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Chef

Source§

impl PackageParser for ChromeCrxRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Chrome

Source§

impl PackageParser for ClojureDepsEdnParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for ClojureProjectCljParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for ComposerJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Composer

Source§

impl PackageParser for ComposerLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Composer

Source§

impl PackageParser for ConanDataParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for ConanFilePyParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Conan

Source§

impl PackageParser for ConanLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Conan

Source§

impl PackageParser for ConanfileTxtParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Conan

Source§

impl PackageParser for CondaEnvironmentYmlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Conda

Source§

impl PackageParser for CondaMetaJsonParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for CondaMetaYamlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Conda

Source§

impl PackageParser for CpanDistIniParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for CpanMakefilePlParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for CpanManifestParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cpan

Source§

impl PackageParser for CpanMetaJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cpan

Source§

impl PackageParser for CpanMetaYmlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cpan

Source§

impl PackageParser for CranParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cran

Source§

impl PackageParser for DebianControlInExtractedDebParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianControlParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianCopyrightParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianDebParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianDebianTarParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianDistrolessInstalledParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianDscParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianInstalledListParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianInstalledMd5sumsParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianInstalledParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianMd5sumInPackageParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DebianOrigTarParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DenoLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Deno

Source§

impl PackageParser for DenoParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Deno

Source§

impl PackageParser for DirectoryBuildPropsParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for DockerfileParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for DotNetDepsJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for FreebsdCompactManifestParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GemArchiveParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GemMetadataExtractedParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GemfileLockParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GemfileParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GemspecParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GitmodulesParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GoModGraphParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GoModParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GoSumParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GoWorkParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GodepsParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for GradleLockfileParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for GradleModuleParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for GradleParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for HackageCabalParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for HackageCabalProjectParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for HackageStackYamlParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for HaxeParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Haxe

Source§

impl PackageParser for HelmChartLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Helm

Source§

impl PackageParser for HelmChartYamlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Helm

Source§

impl PackageParser for HexLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Hex

Source§

impl PackageParser for InstallShieldRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Installshield

Source§

impl PackageParser for IosIpaRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Ios

Source§

impl PackageParser for IsoImageRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Iso

Source§

impl PackageParser for IvyXmlRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Ivy

Source§

impl PackageParser for JBossSarRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::JbossService

Source§

impl PackageParser for JBossServiceXmlRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::JbossService

Source§

impl PackageParser for JavaEarAppXmlRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Ear

Source§

impl PackageParser for JavaEarRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Ear

Source§

impl PackageParser for JavaJarRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Jar

Source§

impl PackageParser for JavaWarRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::War

Source§

impl PackageParser for JavaWarWebXmlRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::War

Source§

impl PackageParser for MavenParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for MesonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Meson

Source§

impl PackageParser for MeteorPackageRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Meteor

Source§

impl PackageParser for MicrosoftUpdateManifestParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for MozillaXpiRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Mozilla

Source§

impl PackageParser for NpmLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Npm

Source§

impl PackageParser for NpmParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Npm

Source§

impl PackageParser for NpmWorkspaceParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Npm

Source§

impl PackageParser for NsisRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nsis

Source§

impl PackageParser for NupkgParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for NuspecParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for OpamParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Opam

Source§

impl PackageParser for OsReleaseParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for PackageReferenceProjectParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for PackagesConfigParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for PackagesLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for PipInspectDeplockParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for PipfileLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pypi

Source§

impl PackageParser for PixiLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pixi

Source§

impl PackageParser for PixiTomlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pixi

Source§

impl PackageParser for PnpmLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::PnpmLock

Source§

impl PackageParser for PodfileLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cocoapods

Source§

impl PackageParser for PodfileParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cocoapods

Source§

impl PackageParser for PodspecJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cocoapods

Source§

impl PackageParser for PodspecParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Cocoapods

Source§

impl PackageParser for PoetryLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pypi

Source§

impl PackageParser for ProjectJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for ProjectLockJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Nuget

Source§

impl PackageParser for PubspecLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pubspec

Source§

impl PackageParser for PubspecYamlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Dart

Source§

impl PackageParser for PylockTomlParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pypi

Source§

impl PackageParser for PythonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pypi

Source§

impl PackageParser for ReadmeParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Readme

Source§

impl PackageParser for RequirementsTxtParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pypi

Source§

impl PackageParser for RpmBdbDatabaseParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmLicenseFilesParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmMarinerManifestParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmNdbDatabaseParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmSpecfileParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmSqliteDatabaseParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for RpmYumdbParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for SbtParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Maven

Source§

impl PackageParser for SharArchiveRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Shar

Source§

impl PackageParser for SquashfsRecognizer

Source§

const PACKAGE_TYPE: PackageType = PackageType::Squashfs

Source§

impl PackageParser for SwiftManifestJsonParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Swift

Source§

impl PackageParser for SwiftPackageResolvedParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Swift

Source§

impl PackageParser for SwiftShowDependenciesParser

Source§

const PACKAGE_TYPE: PackageType = PACKAGE_TYPE

Source§

impl PackageParser for UvLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Pypi

Source§

impl PackageParser for VcpkgManifestParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Vcpkg

Source§

impl PackageParser for YarnLockParser

Source§

const PACKAGE_TYPE: PackageType = PackageType::Npm