|
69 | 69 | <span id="69">69</span>
|
70 | 70 | <span id="70">70</span>
|
71 | 71 | <span id="71">71</span>
|
| 72 | +<span id="72">72</span> |
| 73 | +<span id="73">73</span> |
| 74 | +<span id="74">74</span> |
| 75 | +<span id="75">75</span> |
| 76 | +<span id="76">76</span> |
| 77 | +<span id="77">77</span> |
| 78 | +<span id="78">78</span> |
| 79 | +<span id="79">79</span> |
| 80 | +<span id="80">80</span> |
| 81 | +<span id="81">81</span> |
| 82 | +<span id="82">82</span> |
| 83 | +<span id="83">83</span> |
| 84 | +<span id="84">84</span> |
72 | 85 | </pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.
|
73 | 86 | // *
|
74 | 87 | // * (c) Alex Lyon <arcterus@mail.com>
|
|
80 | 93 | <span class="kw">use </span>std::time::Duration;
|
81 | 94 |
|
82 | 95 | <span class="kw">use </span>uucore::{
|
83 |
| - error::{UResult, UUsageError}, |
84 |
| - format_usage, |
| 96 | + error::{UResult, USimpleError, UUsageError}, |
| 97 | + format_usage, show, |
85 | 98 | };
|
86 | 99 |
|
87 | 100 | <span class="kw">use </span>clap::{crate_version, Arg, ArgAction, Command};
|
|
104 | 117 | </span><span class="kw">pub fn </span>uumain(args: <span class="kw">impl </span>uucore::Args) -> UResult<()> {
|
105 | 118 | <span class="kw">let </span>matches = uu_app().try_get_matches_from(args)<span class="question-mark">?</span>;
|
106 | 119 |
|
107 |
| - <span class="kw">if let </span><span class="prelude-val">Some</span>(values) = matches.get_many::<String>(options::NUMBER) { |
108 |
| - <span class="kw">let </span>numbers = values.map(|s| s.as_str()).collect::<Vec<<span class="kw">_</span>>>(); |
109 |
| - <span class="kw">return </span>sleep(<span class="kw-2">&</span>numbers); |
110 |
| - } |
| 120 | + <span class="kw">let </span>numbers = matches |
| 121 | + .get_many::<String>(options::NUMBER) |
| 122 | + .ok_or_else(|| { |
| 123 | + USimpleError::new( |
| 124 | + <span class="number">1</span>, |
| 125 | + <span class="macro">format!</span>( |
| 126 | + <span class="string">"missing operand\nTry '{} --help' for more information."</span>, |
| 127 | + uucore::execution_phrase() |
| 128 | + ), |
| 129 | + ) |
| 130 | + })<span class="question-mark">? |
| 131 | + </span>.map(|s| s.as_str()) |
| 132 | + .collect::<Vec<<span class="kw">_</span>>>(); |
111 | 133 |
|
112 |
| - <span class="prelude-val">Ok</span>(()) |
| 134 | + <span class="kw">return </span>sleep(<span class="kw-2">&</span>numbers); |
113 | 135 | }
|
114 | 136 |
|
115 | 137 | <span class="kw">pub fn </span>uu_app() -> Command {
|
|
123 | 145 | Arg::new(options::NUMBER)
|
124 | 146 | .help(<span class="string">"pause for NUMBER seconds"</span>)
|
125 | 147 | .value_name(options::NUMBER)
|
126 |
| - .action(ArgAction::Append) |
127 |
| - .required(<span class="bool-val">true</span>), |
| 148 | + .action(ArgAction::Append), |
128 | 149 | )
|
129 | 150 | }
|
130 | 151 |
|
131 | 152 | <span class="kw">fn </span>sleep(args: <span class="kw-2">&</span>[<span class="kw-2">&</span>str]) -> UResult<()> {
|
132 |
| - <span class="kw">let </span>sleep_dur = |
133 |
| - args.iter().try_fold( |
134 |
| - Duration::new(<span class="number">0</span>, <span class="number">0</span>), |
135 |
| - |result, arg| <span class="kw">match </span>uucore::parse_time::from_str(<span class="kw-2">&</span>arg[..]) { |
136 |
| - <span class="prelude-val">Ok</span>(m) => <span class="prelude-val">Ok</span>(m.saturating_add(result)), |
137 |
| - <span class="prelude-val">Err</span>(f) => <span class="prelude-val">Err</span>(UUsageError::new(<span class="number">1</span>, f)), |
138 |
| - }, |
139 |
| - )<span class="question-mark">?</span>; |
| 153 | + <span class="kw">let </span><span class="kw-2">mut </span>arg_error = <span class="bool-val">false</span>; |
| 154 | + <span class="kw">let </span>intervals = args.iter().map(|s| <span class="kw">match </span>uucore::parse_time::from_str(s) { |
| 155 | + <span class="prelude-val">Ok</span>(result) => result, |
| 156 | + <span class="prelude-val">Err</span>(err) => { |
| 157 | + arg_error = <span class="bool-val">true</span>; |
| 158 | + <span class="macro">show!</span>(USimpleError::new(<span class="number">1</span>, err)); |
| 159 | + Duration::new(<span class="number">0</span>, <span class="number">0</span>) |
| 160 | + } |
| 161 | + }); |
| 162 | + <span class="kw">let </span>sleep_dur = intervals.fold(Duration::new(<span class="number">0</span>, <span class="number">0</span>), |acc, n| acc + n); |
| 163 | + <span class="kw">if </span>arg_error { |
| 164 | + <span class="kw">return </span><span class="prelude-val">Err</span>(UUsageError::new(<span class="number">1</span>, <span class="string">""</span>)); |
| 165 | + }; |
140 | 166 | thread::sleep(sleep_dur);
|
141 | 167 | <span class="prelude-val">Ok</span>(())
|
142 | 168 | }
|
|
0 commit comments