pub enum CrateSpec {
CratesIo {
name: String,
version: Option<VersionReq>,
},
Registry {
source: RegistrySource,
name: String,
version: Option<VersionReq>,
},
Git {
repo: String,
selector: GitSelector,
name: Option<String>,
version: Option<VersionReq>,
},
Forge {
forge: Forge,
selector: GitSelector,
name: Option<String>,
version: Option<VersionReq>,
},
LocalDir {
path: PathBuf,
name: Option<String>,
version: Option<VersionReq>,
},
}Expand description
A specification of a crate that the user wants to execute.
Note that “crate” here doesn’t necessarily mean “crate on Crates.io”. We support various ways of referring to a crate to run, which is why this enum type is needed. It abstracts away the various ways the user might specify a crate to run. Ultimately all of these need to be resolved to a path in the local filesystem, controlled by cgx, from which we can build and run.
§Versioning
For crate specs that point to registries (which store multiple versions of a crate), the default is to choose the latest version. If a version is specified, then the most recent version that matches the specification is chosen. If no such version exists then an error occurs.
For crate specs that point to local paths, forges, or git repos, there is no choice of
version; the version of the crate is whatever it is at the specified location. In those cases,
if the version field is present, it is validated against the version found at the location,
and if it’s not compatible then an error occurs.
Variants§
CratesIo
A crate on Crates.io, specified by its name and optional version.
Registry
A crate on some other registry, specified by its name and optional version.
Fields
source: RegistrySourceThe registry source (either a named registry or a direct index URL)
version: Option<VersionReq>Git
A crate in a git repository, specified by the repository URL and optional branch, tag, or commit hash.
The name field is optional. If omitted, it will be discovered from the repository
(which must contain exactly one crate). If the repository contains multiple crates,
the name must be specified.
If the version field is present, the crate found at the specified repo must have a
version that is compatible with the version specification or an error occurs.
Forge
A crate in a repo in some software Forge, specified by its repo, optional path within that repo, and optional branch, tag, or commit hash.
The name field is optional. If omitted, it will be discovered from the repository
(which must contain exactly one crate). If the repository contains multiple crates,
the name must be specified.
Fields
selector: GitSelectorA branch, tag, or commit hash within the repository
version: Option<VersionReq>LocalDir
A crate in a local directory, specified by the path to the directory containing the crate’s
Cargo.toml or a workspace Cargo.toml to which the crate belongs.
The name field is optional. If omitted, it will be discovered from the path
(which must contain exactly one crate). If the path contains multiple crates
(i.e., a workspace), the name must be specified.
Implementations§
Source§impl CrateSpec
impl CrateSpec
Sourcepub fn load(config: &Config, req: &CrateRequest) -> Result<Self>
pub fn load(config: &Config, req: &CrateRequest) -> Result<Self>
Resolve a CrateRequest into a CrateSpec, respecting config-based overrides.
This method applies config-based transformations and overrides:
- Alias resolution: Maps short names to full crate names (e.g.,
rg->ripgrep) - Tool pinning: Applies version pinning from config for known tools
- Default registry: Uses config’s default registry when no registry specified
Priority order for version selection:
- The user’s explicitly specified version requirement in
CrateRequest::version - Config tool pinning
- Current/latest version of the crate at whatever source is being used
Sourcepub fn configured_tool_name(&self) -> Option<&str>
pub fn configured_tool_name(&self) -> Option<&str>
Get the crate name used for looking up the crate in the [tools] TOML section,
if one is known.
Not all CrateSpec variants have a known crate name; for those variants, unfortunately,
the contents of the [tools] section cannot be used to configure them, and this method
returns None.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for CrateSpec
impl<'de> Deserialize<'de> for CrateSpec
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for CrateSpec
impl StructuralPartialEq for CrateSpec
Auto Trait Implementations§
impl Freeze for CrateSpec
impl RefUnwindSafe for CrateSpec
impl Send for CrateSpec
impl Sync for CrateSpec
impl Unpin for CrateSpec
impl UnsafeUnpin for CrateSpec
impl UnwindSafe for CrateSpec
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);