A published crate is identified by metadata such as its package name and semantic version.

Program

Play the program to choose the package version and see the label assembled from metadata.

crate_metadata.rs
fn main() {
    let version = ;
    let package = Package { name: "trace-book", version };
    let label = package.label();
    println!("{label}");
}

struct Package<'a> {
    name: &'a str,
    version: &'a str,
}

impl<'a> Package<'a> {
    fn label(&self) -> String {
        format!("{}@{}", self.name, self.version)
    }
}
fn main() {
    let version = ;
    let package = Package { name: "trace-book", version };
    let label = package.label();
    println!("{label}");
}

struct Package<'a> {
    name: &'a str,
    version: &'a str,
}

impl<'a> Package<'a> {
    fn label(&self) -> String {
        format!("{}@{}", self.name, self.version)
    }
}
fn main() {
    let version = ;
    let package = Package { name: "trace-book", version };
    let label = package.label();
    println!("{label}");
}

struct Package<'a> {
    name: &'a str,
    version: &'a str,
}

impl<'a> Package<'a> {
    fn label(&self) -> String {
        format!("{}@{}", self.name, self.version)
    }
}
metadata Crate metadata gives tools a stable package name and version to display or resolve.
semantic version Changing `version` models the version string a crate would publish.
method `label` keeps formatting behavior beside the package data it uses.