|
433 | 433 | <span id="428">428</span>
|
434 | 434 | <span id="429">429</span>
|
435 | 435 | <span id="430">430</span>
|
| 436 | +<span id="431">431</span> |
| 437 | +<span id="432">432</span> |
| 438 | +<span id="433">433</span> |
| 439 | +<span id="434">434</span> |
| 440 | +<span id="435">435</span> |
| 441 | +<span id="436">436</span> |
| 442 | +<span id="437">437</span> |
436 | 443 | </pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
|
437 | 444 | <span class="comment">// *</span>
|
438 | 445 | <span class="comment">// * (c) Virgile Andreani <virgile.andreani@anbuco.fr></span>
|
|
451 | 458 | <span class="kw">use</span> <span class="ident">std::fmt</span>;
|
452 | 459 | <span class="kw">use</span> <span class="ident">std::fs::File</span>;
|
453 | 460 | <span class="kw">use</span> <span class="ident">std::io</span>::{<span class="ident">stdin</span>, <span class="ident">stdout</span>, <span class="ident">BufRead</span>, <span class="ident">BufReader</span>, <span class="ident">BufWriter</span>, <span class="ident">Read</span>, <span class="ident">Stdout</span>, <span class="ident">Write</span>};
|
| 461 | +<span class="kw">use</span> <span class="ident">std::num::IntErrorKind</span>; |
454 | 462 | <span class="kw">use</span> <span class="ident">std::str::from_utf8</span>;
|
455 | 463 | <span class="kw">use</span> <span class="ident">unicode_width::UnicodeWidthChar</span>;
|
456 | 464 | <span class="kw">use</span> <span class="ident">uucore::display::Quotable</span>;
|
|
468 | 476 | <span class="kw">enum</span> <span class="ident">ParseError</span> {
|
469 | 477 | <span class="ident">InvalidCharacter</span>(<span class="ident">String</span>),
|
470 | 478 | <span class="ident">TabSizeCannotBeZero</span>,
|
| 479 | + <span class="ident">TabSizeTooLarge</span>, |
471 | 480 | <span class="ident">TabSizesMustBeAscending</span>,
|
472 | 481 | }
|
473 | 482 |
|
|
481 | 490 | <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab size contains invalid character(s): {}"</span>, <span class="ident">s</span>.<span class="ident">quote</span>())
|
482 | 491 | }
|
483 | 492 | <span class="ident"><span class="self">Self</span>::TabSizeCannotBeZero</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab size cannot be 0"</span>),
|
| 493 | + <span class="ident"><span class="self">Self</span>::TabSizeTooLarge</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab stop value is too large"</span>), |
484 | 494 | <span class="ident"><span class="self">Self</span>::TabSizesMustBeAscending</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab sizes must be ascending"</span>),
|
485 | 495 | }
|
486 | 496 | }
|
|
492 | 502 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">nums</span> <span class="op">=</span> <span class="ident">Vec::new</span>();
|
493 | 503 |
|
494 | 504 | <span class="kw">for</span> <span class="ident">word</span> <span class="kw">in</span> <span class="ident">words</span> {
|
495 |
| - <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Ok</span>(<span class="ident">num</span>) <span class="op">=</span> <span class="ident">word</span>.<span class="ident">parse</span>() { |
496 |
| - <span class="ident">nums</span>.<span class="ident">push</span>(<span class="ident">num</span>); |
497 |
| - } <span class="kw">else</span> { |
498 |
| - <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ParseError::InvalidCharacter</span>( |
499 |
| - <span class="ident">word</span>.<span class="ident">trim_start_matches</span>(<span class="ident">char::is_numeric</span>).<span class="ident">to_string</span>(), |
500 |
| - )); |
| 505 | + <span class="kw">match</span> <span class="ident">word</span>.<span class="ident">parse</span>::<span class="op"><</span><span class="ident">usize</span><span class="op">></span>() { |
| 506 | + <span class="prelude-val">Ok</span>(<span class="ident">num</span>) => <span class="ident">nums</span>.<span class="ident">push</span>(<span class="ident">num</span>), |
| 507 | + <span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="kw">match</span> <span class="ident">e</span>.<span class="ident">kind</span>() { |
| 508 | + <span class="ident">IntErrorKind::PosOverflow</span> => <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ParseError::TabSizeTooLarge</span>), |
| 509 | + <span class="kw">_</span> => { |
| 510 | + <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ParseError::InvalidCharacter</span>( |
| 511 | + <span class="ident">word</span>.<span class="ident">trim_start_matches</span>(<span class="ident">char::is_numeric</span>).<span class="ident">to_string</span>(), |
| 512 | + )) |
| 513 | + } |
| 514 | + }, |
501 | 515 | }
|
502 | 516 | }
|
503 | 517 |
|
|
0 commit comments