Struct Channel

Source
pub struct Channel {
    pub date: NaiveDate,
    pub pkg: BTreeMap<String, Package>,
    pub renames: BTreeMap<String, String>,
}
Expand description

The metadata for a Rust release channel.

This data structure represents all the information available in a Rust release channel metadata file. You can create one from scratch with new(), or by parsing an official metadata file:

use std::fs;
use std::io::Read;

let mut handle = fs::File::open("examples/channel-rust-1.24.toml")?;
let mut buffer = String::new();
handle.read_to_string(&mut buffer);
let channel: rust_release_channel::Channel = buffer.parse()?;

Look at the pkg field to find out what packages are available from this channel. If you have something specific in mind, consult the .lookup_artefact() method.

Fields§

§date: NaiveDate

The creation date of the original metadata file, in YYYY-MM-DD format.

§pkg: BTreeMap<String, Package>

The packages included in this channel.

Each key is the name of a package, the corresponding value is the metadata for that package.

§renames: BTreeMap<String, String>

A mapping from old package names to new ones.

Sometimes packages get renamed. For the benefit of systems that have the old name recorded, this mapping allows them to look up the new name. Packages that have not been renamed should not appear in this map, and packages renamed multiple times should have each legacy name mapped to the current name.

Implementations§

Source§

impl Channel

Source

pub fn new() -> Channel

Create a new, empty Channel whose creation date is today.

“today” means the current date in the local timezone.

let channel = rust_release_channel::Channel::new();
Source

pub fn with_date(date: NaiveDate) -> Channel

Create a new, empty Channel whose creation date is set to the given value.

let channel = rust_release_channel::Channel::with_date(
    chrono::NaiveDate::from_ymd(2018, 2, 26),
);
Source

pub fn to_string(&self) -> Result<String, Error>

Serialize this Channel to the standard metadata format.

If you write the resulting String to a file, it will be a standard channel metadata file.

let metadata_string = channel.to_string()?;
Source

pub fn lookup_artefact<'s, 'q, T>(&'s self, query: T) -> Option<&'s Artefact>
where T: Into<ArtefactQuery<'q>>,

Find the Artefact for an ArtefactToken or ArtefactQuery.

If you found an ArtefactToken inside some other Artefact’s components or extensions fields, you can pass it here to find out what artefact it was talking about.

If you’re interested in some specific Artefact that might or might not be in this channel, you can create an ArtefactQuery and pass it here to find it if it exists.

If no artefact exists in this channel for the given package and target, this method will consult the renames map to see if the requested package is available under a new name. Note that the rename list is only checked once; this method will not follow a chain of renames, so the rename list should map each historical package name directly to the latest name for that package.

If there’s still no matching artefact, this method returns None.

let query = rust_release_channel::ArtefactQuery::new(
    "rustc",
    "x86_64-unknown-linux-gnu",
);
channel.lookup_artefact(query)
    .map(|artefact| {
        println!("Rust for Linux available in these formats:");
        for each in artefact.standalone.keys() {
            println!("- {}", each);
        }
    });
Source

pub fn validate<'a>(&'a self) -> Vec<ValidationError<'a>>

Validate the internal consistency of this metadata.

Specifically:

  • If renames says a package named X was renamed to Y, then Y should exist in the pkg map and X should not.
  • If a package is renamed, the new name must be different to the old name.
  • Each component or extension in an Artefact should reference the name of a package in the channel’s pkg map, and a target in that package’s target map.
  • The “components” links between artefacts must be acyclic; that is, an artefact must not include itself as a component, or include some other artefact that (directly or indirectly) includes it as a component.

Returns all detected problems.

let errors = channel.validate();
if !errors.is_empty() {
    println!("Errors found:");
    for each in errors {
        println!("  - {}", each);
    }
}

Trait Implementations§

Source§

impl Clone for Channel

Source§

fn clone(&self) -> Channel

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 Channel

Source§

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

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

impl Default for Channel

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Channel

Source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Channel

Source§

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

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

impl FromStr for Channel

Source§

type Err = Error

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for Channel

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 Ord for Channel

Source§

fn cmp(&self, other: &Channel) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Channel

Source§

fn eq(&self, other: &Channel) -> 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 PartialOrd for Channel

Source§

fn partial_cmp(&self, other: &Channel) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for Channel

Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for Channel

Source§

impl StructuralPartialEq for Channel

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
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.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,