Skip to main content

PackageName

Struct PackageName 

Source
pub struct PackageName(/* private fields */);
Expand description

A package name: one flat identifier, ASCII lowercase letters, digits and hyphens, starting with a letter, with every hyphen followed by a letter — docs/spec/packages.md’s whole rule for name. That shape is what keeps a package name and a module name from ever being confused (one is lowercase-with-hyphens, the other uppercase-with-dots), and what makes the namespace a package’s name derives unambiguous.

The only way to build one is PackageName::new, which rejects anything that does not match the rule — there is no way to hold a PackageName that manifest validation would have refused.

Implementations§

Source§

impl PackageName

Source

pub fn new<S: Into<String>>(name: S) -> Result<PackageName, InvalidPackageName>

Build a PackageName, or say why name is not one.

Source

pub fn as_str(&self) -> &str

Source

pub fn core() -> PackageName

zelkova-core, resolve::CORE_PACKAGE: the one package the compiler names on its own, because it is where the scalars are declared.

Built without going through PackageName::new’s check, so that naming a scalar needs no unwrap; that the constant passes the check is a unit test.

Source

pub fn is_core(&self) -> bool

Whether this is zelkova-core, the one package the default imports and the scalar seeding they are replaced by both key themselves on (DEC-17 decision 4) — and, since resolve::visible_modules rejects any other package that declares one of the eight, the only package that can be shaped like it.

Source

pub fn namespace(&self) -> Name

The prefix this package’s modules are named through from outside it: the name split at its hyphens, each piece capitalised, joined — The namespace. acme-widgets is AcmeWidgets, todo is Todo.

It is a Name and not a PackageName: what comes back is a module-name prefix, and the whole point of the shape rule above is that the two are never confusable. Distinct package names give distinct namespaces, which is what lets two wrapped dependencies keep out of each other’s way with nothing checked.

A package never writes its own namespace, so nothing inside the package being compiled goes through here: resolve::visible_modules is the one caller, and it applies this only to a dependency’s modules.

Trait Implementations§

Source§

impl Clone for PackageName

Source§

fn clone(&self) -> PackageName

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PackageName

Source§

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

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

impl Display for PackageName

Source§

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

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

impl Eq for PackageName

Source§

impl Hash for PackageName

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 PackageName

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for PackageName

Auto Trait Implementations§

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
§

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

§

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

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

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

§

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

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

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

§

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, 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> 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, 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.