|
1 | 1 | use crate::prelude::*;
|
2 | 2 | use crate::utils;
|
3 | 3 | use rustwide::Toolchain as RustwideToolchain;
|
4 |
| -use std::borrow::Cow; |
5 | 4 | use std::fmt;
|
6 | 5 | use std::str::FromStr;
|
7 | 6 |
|
8 | 7 | #[cfg(test)]
|
9 | 8 | lazy_static! {
|
10 | 9 | /// This toolchain is used during internal tests, and must be different than TEST_TOOLCHAIN
|
11 | 10 | pub(crate) static ref MAIN_TOOLCHAIN: Toolchain = Toolchain {
|
12 |
| - source: RustwideToolchain::Dist { |
13 |
| - name: Cow::Borrowed("stable"), |
14 |
| - }, |
| 11 | + source: RustwideToolchain::dist("stable"), |
15 | 12 | rustflags: None,
|
16 | 13 | ci_try: false,
|
17 | 14 | patches: Vec::new(),
|
18 | 15 | };
|
19 | 16 |
|
20 | 17 | /// This toolchain is used during internal tests, and must be different than MAIN_TOOLCHAIN
|
21 | 18 | pub(crate) static ref TEST_TOOLCHAIN: Toolchain = Toolchain {
|
22 |
| - source: RustwideToolchain::Dist { |
23 |
| - name: Cow::Borrowed("beta"), |
24 |
| - }, |
| 19 | + source: RustwideToolchain::dist("beta"), |
25 | 20 | rustflags: None,
|
26 | 21 | ci_try: false,
|
27 | 22 | patches: Vec::new(),
|
@@ -54,17 +49,17 @@ impl std::ops::Deref for Toolchain {
|
54 | 49 |
|
55 | 50 | impl fmt::Display for Toolchain {
|
56 | 51 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
57 |
| - match &self.source { |
58 |
| - RustwideToolchain::Dist { name } => write!(f, "{}", name)?, |
59 |
| - RustwideToolchain::CI { sha, .. } => { |
60 |
| - if self.ci_try { |
61 |
| - write!(f, "try#{}", sha)?; |
62 |
| - } else { |
63 |
| - write!(f, "master#{}", sha)?; |
64 |
| - } |
| 52 | + if let Some(dist) = self.source.as_dist() { |
| 53 | + write!(f, "{}", dist.name())?; |
| 54 | + } else if let Some(ci) = self.source.as_ci() { |
| 55 | + if self.ci_try { |
| 56 | + write!(f, "try#{}", ci.sha())?; |
| 57 | + } else { |
| 58 | + write!(f, "master#{}", ci.sha())?; |
65 | 59 | }
|
66 |
| - _ => panic!("unsupported rustwide toolchain"), |
67 |
| - }; |
| 60 | + } else { |
| 61 | + panic!("unsupported rustwide toolchain"); |
| 62 | + } |
68 | 63 |
|
69 | 64 | if let Some(ref flag) = self.rustflags {
|
70 | 65 | write!(f, "+rustflags={}", flag)?;
|
@@ -99,31 +94,23 @@ impl FromStr for Toolchain {
|
99 | 94 | let source = if let Some(hash_idx) = raw_source.find('#') {
|
100 | 95 | let (source_name, sha_with_hash) = raw_source.split_at(hash_idx);
|
101 | 96 |
|
102 |
| - let sha = (&sha_with_hash[1..]).to_string(); |
| 97 | + let sha = &sha_with_hash[1..]; |
103 | 98 | if sha.is_empty() {
|
104 | 99 | return Err(ToolchainParseError::EmptyName);
|
105 | 100 | }
|
106 | 101 |
|
107 | 102 | match source_name {
|
108 | 103 | "try" => {
|
109 | 104 | ci_try = true;
|
110 |
| - RustwideToolchain::CI { |
111 |
| - sha: Cow::Owned(sha), |
112 |
| - alt: false, |
113 |
| - } |
| 105 | + RustwideToolchain::ci(sha, false) |
114 | 106 | }
|
115 |
| - "master" => RustwideToolchain::CI { |
116 |
| - sha: Cow::Owned(sha), |
117 |
| - alt: false, |
118 |
| - }, |
| 107 | + "master" => RustwideToolchain::ci(sha, false), |
119 | 108 | name => return Err(ToolchainParseError::InvalidSourceName(name.to_string())),
|
120 | 109 | }
|
121 | 110 | } else if raw_source.is_empty() {
|
122 | 111 | return Err(ToolchainParseError::EmptyName);
|
123 | 112 | } else {
|
124 |
| - RustwideToolchain::Dist { |
125 |
| - name: Cow::Owned(raw_source.to_string()), |
126 |
| - } |
| 113 | + RustwideToolchain::dist(raw_source) |
127 | 114 | };
|
128 | 115 |
|
129 | 116 | let mut rustflags = None;
|
@@ -254,35 +241,23 @@ mod tests {
|
254 | 241 | // Test valid reprs
|
255 | 242 | test_from_str! {
|
256 | 243 | "stable" => {
|
257 |
| - source:RustwideToolchain::Dist { |
258 |
| - name: "stable".into(), |
259 |
| - }, |
| 244 | + source: RustwideToolchain::dist("stable"), |
260 | 245 | ci_try: false,
|
261 | 246 | },
|
262 | 247 | "beta-1970-01-01" => {
|
263 |
| - source: RustwideToolchain::Dist { |
264 |
| - name: "beta-1970-01-01".into(), |
265 |
| - }, |
| 248 | + source: RustwideToolchain::dist("beta-1970-01-01"), |
266 | 249 | ci_try: false,
|
267 | 250 | },
|
268 | 251 | "nightly-1970-01-01" => {
|
269 |
| - source: RustwideToolchain::Dist { |
270 |
| - name: "nightly-1970-01-01".into(), |
271 |
| - }, |
| 252 | + source: RustwideToolchain::dist("nightly-1970-01-01"), |
272 | 253 | ci_try: false,
|
273 | 254 | },
|
274 | 255 | "master#0000000000000000000000000000000000000000" => {
|
275 |
| - source: RustwideToolchain::CI { |
276 |
| - sha: "0000000000000000000000000000000000000000".into(), |
277 |
| - alt: false, |
278 |
| - }, |
| 256 | + source: RustwideToolchain::ci("0000000000000000000000000000000000000000", false), |
279 | 257 | ci_try: false,
|
280 | 258 | },
|
281 | 259 | "try#0000000000000000000000000000000000000000" => {
|
282 |
| - source: RustwideToolchain::CI { |
283 |
| - sha: "0000000000000000000000000000000000000000".into(), |
284 |
| - alt: false, |
285 |
| - }, |
| 260 | + source: RustwideToolchain::ci("0000000000000000000000000000000000000000", false), |
286 | 261 | ci_try: true,
|
287 | 262 | },
|
288 | 263 | };
|
|
0 commit comments