Add a --reverse flag #85
Mergedg1tbot merged into maing1t-agenton g1t
Approved by g1t-agent
3 files+28−10/3 viewed
| 9 | 9 | | `NAME` | Optional. The name to greet. Only the first argument is read. Defaults to the `USER` environment variable, then to `world`. | | |
| 10 | 10 | | `--shout` | Upper-cases the greeting. | | |
| 11 | 11 | | `--whisper` | Lower-cases the greeting and ends it with `...` instead of `!`. With `--shout`, the last one given wins. | | |
| 12 | + | | `--reverse` | Spells the name backwards. Applies to the default name too. | | |
| 12 | 13 | | `--version` | Prints the crate version and exits. | | |
| 13 | 14 | | `--times N` | Prints the greeting `N` times. Defaults to 1. | | |
| 14 | 15 | | `--lang LANG` | Greets in the given language. Supported values are `en`, `es` and `fr`. Defaults to `en`. | |
| 30 | 30 | pub shout: bool, | |
| 31 | 31 | /// Whether to lower-case the greeting and end it with `...` (`--whisper`). | |
| 32 | 32 | pub whisper: bool, | |
| 33 | + | /// Whether to spell the name backwards (`--reverse`). | |
| 34 | + | pub reverse: bool, | |
| 33 | 35 | /// Whether to print the crate version and exit (`--version`). | |
| 34 | 36 | pub version: bool, | |
| 35 | 37 | /// How many times to print the greeting (`--times N`). | |
| 52 | 54 | name: None, | |
| 53 | 55 | shout: false, | |
| 54 | 56 | whisper: false, | |
| 57 | + | reverse: false, | |
| 55 | 58 | version: false, | |
| 56 | 59 | times: 1, | |
| 57 | 60 | lang: Lang::En, | |
| 84 | 87 | } else if arg == "--whisper" { | |
| 85 | 88 | options.whisper = true; | |
| 86 | 89 | options.shout = false; | |
| 90 | + | } else if arg == "--reverse" { | |
| 91 | + | options.reverse = true; | |
| 87 | 92 | } else if arg == "--version" { | |
| 88 | 93 | options.version = true; | |
| 89 | 94 | } else if arg == "--quiet" { | |
| 114 | 119 | Ok(options) | |
| 115 | 120 | } | |
| 116 | 121 | ||
| 122 | + | /// `name` spelled backwards. | |
| 123 | + | pub fn reverse(name: &str) -> String { | |
| 124 | + | name.chars().rev().collect() | |
| 125 | + | } | |
| 126 | + | ||
| 117 | 127 | /// `text` upper-cased. | |
| 118 | 128 | pub fn shout(text: &str) -> String { | |
| 119 | 129 | text.to_uppercase() | |
| 349 | 359 | } | |
| 350 | 360 | ||
| 351 | 361 | #[test] | |
| 362 | + | fn parse_args_reverse() { | |
| 363 | + | assert!(parse_args(args(&["--reverse", "Ada"])).unwrap().reverse); | |
| 364 | + | assert!(!parse_args(args(&["Ada"])).unwrap().reverse); | |
| 365 | + | } | |
| 366 | + | ||
| 367 | + | #[test] | |
| 368 | + | fn reverse_spells_backwards() { | |
| 369 | + | assert_eq!(hail(&reverse("Ada")), "Hi, adA!"); | |
| 370 | + | } | |
| 371 | + | ||
| 372 | + | #[test] | |
| 352 | 373 | fn greets_by_name() { | |
| 353 | 374 | assert_eq!(hail("Ada"), "Hi, Ada!"); | |
| 354 | 375 | } |
| 1 | 1 | use std::{env, process}; | |
| 2 | 2 | ||
| 3 | − | use hello::{greeting_in, loud, parse_args, part, shout, wave, whisper}; | |
| 3 | + | use hello::{greeting_in, loud, parse_args, part, reverse, shout, wave, whisper}; | |
| 4 | 4 | ||
| 5 | 5 | fn main() { | |
| 6 | 6 | let options = match parse_args(env::args().skip(1)) { | |
| 22 | 22 | .name | |
| 23 | 23 | .or_else(|| env::var("USER").ok()) | |
| 24 | 24 | .unwrap_or_else(|| "world".to_owned()); | |
| 25 | + | let name = if options.reverse { | |
g1t-agent Because the name is reversed here, | |||
| 26 | + | reverse(&name) | |
| 27 | + | } else { | |
| 28 | + | name | |
| 29 | + | }; | |
| 25 | 30 | let message = greeting_in(&name, options.lang); | |
| 26 | 31 | let message = if options.loud { | |
| 27 | 32 | loud(&message) | |