Struct rust_release_channel::Channel[][src]

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

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

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

The packages included in this channel.

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

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.

Methods

impl Channel
[src]

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();

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),
);

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()?;

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);
        }
    });

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

impl Serialize for Channel
[src]

Serialize this value into the given Serde serializer. Read more

impl<'de> Deserialize<'de> for Channel
[src]

Deserialize this value from the given Serde deserializer. Read more

impl Debug for Channel
[src]

Formats the value using the given formatter. Read more

impl Clone for Channel
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl PartialEq for Channel
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl Eq for Channel
[src]

impl PartialOrd for Channel
[src]

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

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl Ord for Channel
[src]

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

impl Hash for Channel
[src]

Feeds this value into the given [Hasher]. Read more

Feeds a slice of this type into the given [Hasher]. Read more

impl Default for Channel
[src]

Returns the "default value" for a type. Read more

impl FromStr for Channel
[src]

The associated error which can be returned from parsing.

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

impl Display for Channel
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations

impl Send for Channel

impl Sync for Channel