https://github.com/archer884/xvii
Roman numerals
https://github.com/archer884/xvii
availability-naas numeral roman-numerals rust xvii
Last synced: about 2 months ago
JSON representation
Roman numerals
- Host: GitHub
- URL: https://github.com/archer884/xvii
- Owner: archer884
- License: apache-2.0
- Created: 2017-03-15T03:37:19.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-10-12T21:31:59.000Z (over 4 years ago)
- Last Synced: 2025-04-22T10:36:22.407Z (about 2 months ago)
- Topics: availability-naas, numeral, roman-numerals, rust, xvii
- Language: Rust
- Size: 58.6 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# XVII
[](https://crates.io/crates/xvii)
[](https://docs.rs/xvii)
[](https://travis-ci.org/archer884/xvii)...Pronounced any way you like, including "seventeen."
This library provides parsing and formatting for Roman numerals. According to my (probably extremely suspect) benchmarks, this is the best-performing library of its kind available on crates.io (you know, as of St. Patrick's Day, 2017 when I did the tests), so you should definitely employ it in your high-availability NAAS (numerals-as-a-service) project.
(Seriously, though, read the license--no warranties implied!)
Also, if you have a high-availability NAAS project, you need to have your head examined. I don't know if that was clear when I originally wrote this readme, so I'm adding it now.
## Usage
### Parsing
Parsing is provided through Rust's ordinary `FromStr` trait, meaning you can create `Roman` values same as you create any other number--albeit with slightly simpler error cases, since the only possible errors are "Hey, that letter can't go in there," or "Dude, they go from 1 to 4999 and that's it!"
```rust
let seventeen: Roman = "XVII".parse().unwrap();
```### Formatting
There are several formatting options. `Roman` implements `Display`, which means that it'll work fine with `println!("{}")` et al., but for maximum efficiency (stop laughing!) I also provide two other functions: `to_lowercase()` and `to_uppercase()`. These skip the `Display` piping and just go straight into a new string. Lastly, the `format()` method builds a lazy formatter in either upper or lowercase mode.
## Changelog
* **v0.4.1** Upgrade to rust edition 2018, support for no-std usage (thanks to [WaffleLapkin](https://github.com/WaffleLapkin)!), plenty of cleanup (also thanks to him, really).
* **v0.2.2** Upgrade parsing to use some kind of whacky state machine in order to permit numbers up to the commonly accepted ceiling of 4999, or MMMMCMXCIX, thereby avoiding a potential Y4K bug. Your thousand year reich is now safe with me.## License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE][apc] or http://www.apache.org/licenses/LICENSE-2.0)
* MIT License ([LICENSE-MIT][mit] or http://opensource.org/licenses/MIT)at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
[apc]:https://github.com/archer884/xvii/blob/master/LICENSE-APACHE
[mit]:https://github.com/archer884/xvii/blob/master/LICENSE-MIT