goup_version/
lib.rs

1pub mod consts;
2mod dir;
3mod version;
4
5use std::str::FromStr;
6
7pub use dir::Dir;
8pub use version::Version;
9
10/// support toolchain
11#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12pub enum Toolchain {
13    Stable,
14    Unstable,
15    Beta,
16    Version(String),
17    Nightly,
18}
19
20impl FromStr for Toolchain {
21    type Err = anyhow::Error;
22
23    fn from_str(s: &str) -> Result<Self, Self::Err> {
24        Ok(match s {
25            "stable" => Self::Stable,
26            "unstable" => Self::Unstable,
27            "nightly" | "tip" | "gotip" => Self::Nightly,
28            "beta" => Self::Beta,
29            _ => Self::Version(s.to_owned()),
30        })
31    }
32}
33
34/// a toolchain filter.
35#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36pub enum ToolchainFilter {
37    Stable,
38    Unstable,
39    Beta,
40    Filter(String),
41}
42
43impl FromStr for ToolchainFilter {
44    type Err = anyhow::Error;
45
46    fn from_str(s: &str) -> Result<Self, Self::Err> {
47        Ok(match s {
48            "stable" => Self::Stable,
49            "unstable" => Self::Unstable,
50            "beta" => Self::Beta,
51            _ => Self::Filter(s.to_owned()),
52        })
53    }
54}