Purl

Struct Purl 

Source
pub struct Purl {
    pub purl_type: String,
    pub namespace: Option<String>,
    pub name: String,
    pub version: Option<String>,
}
Expand description

A Package URL builder for creating valid PURL strings.

PURLs are a standardized way to identify software packages across different ecosystems. This struct provides a builder pattern for constructing valid PURL strings.

§Format

pkg:type/namespace/name@version?qualifiers#subpath
  • type (required): Package ecosystem (npm, maven, pypi, etc.)
  • namespace (optional): Package scope/group (e.g., Maven groupId, npm scope)
  • name (required): Package name
  • version (optional): Specific version

§Example

use vulnera_advisor::Purl;

// Scoped npm package
let purl = Purl::new("npm", "core")
    .with_namespace("@angular")
    .with_version("12.0.0")
    .to_string();
assert_eq!(purl, "pkg:npm/%40angular/core@12.0.0");

Fields§

§purl_type: String

Package type (ecosystem).

§namespace: Option<String>

Optional namespace (e.g., Maven groupId, npm scope).

§name: String

Package name.

§version: Option<String>

Optional version.

Implementations§

Source§

impl Purl

Source

pub fn new(ecosystem: impl Into<String>, name: impl Into<String>) -> Self

Create a new PURL with the given ecosystem and package name.

The ecosystem is automatically mapped to the correct PURL type (e.g., “crates.io” → “cargo”, “PyPI” → “pypi”).

§Arguments
  • ecosystem - The package ecosystem (e.g., “npm”, “crates.io”, “PyPI”)
  • name - The package name
§Example
use vulnera_advisor::Purl;

let purl = Purl::new("crates.io", "serde");
assert_eq!(purl.purl_type, "cargo");
Source

pub fn new_validated( ecosystem: impl Into<String>, name: impl Into<String>, ) -> Result<Self, PurlError>

Create a new PURL with validation.

Returns an error if the ecosystem is not in the known list.

§Example
use vulnera_advisor::Purl;

// Valid ecosystem
let purl = Purl::new_validated("npm", "lodash").unwrap();

// Invalid ecosystem
let result = Purl::new_validated("invalid", "package");
assert!(result.is_err());
Source

pub fn is_known_ecosystem(purl_type: &str) -> bool

Check if an ecosystem type is in the known list.

Source

pub fn with_namespace(self, namespace: impl Into<String>) -> Self

Add a namespace (e.g., Maven groupId, npm scope like “@angular”).

Source

pub fn with_version(self, version: impl Into<String>) -> Self

Add a version.

Source

pub fn parse(s: &str) -> Result<Self, PurlError>

Parse a PURL string into a Purl struct.

§Example
use vulnera_advisor::Purl;

let purl = Purl::parse("pkg:npm/lodash@4.17.20").unwrap();
assert_eq!(purl.purl_type, "npm");
assert_eq!(purl.name, "lodash");
assert_eq!(purl.version, Some("4.17.20".to_string()));
Source

pub fn ecosystem(&self) -> String

Get the ecosystem name (reverse mapping from PURL type).

Returns the common ecosystem name for known mappings, or the PURL type itself if no mapping exists.

Source

pub fn cache_key(&self) -> String

Generate a hash suitable for use as a cache key.

This creates a deterministic hash of the PURL for use in Redis cache keys.

Source

pub fn cache_key_from_str(purl: &str) -> String

Generate a cache key from a PURL string.

Trait Implementations§

Source§

impl Clone for Purl

Source§

fn clone(&self) -> Purl

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Purl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Purl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for Purl

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Purl

Source§

fn eq(&self, other: &Purl) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Purl

Source§

impl StructuralPartialEq for Purl

Auto Trait Implementations§

§

impl Freeze for Purl

§

impl RefUnwindSafe for Purl

§

impl Send for Purl

§

impl Sync for Purl

§

impl Unpin for Purl

§

impl UnwindSafe for Purl

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> ToStringFallible for T
where T: Display,

Source§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more