# num2words
Convert numbers like `42` to `forty-two`
## Usage
This crate can be either used as a library or a binary.
### Library
Example usage:
```rust
use num2words::Num2Words;
assert_eq!(Num2Words::new(42).to_words(), Ok(String::from("forty-two")));
```
The builder `Num2Words` can take any of these methods: `lang`, `cardinal`,
`ordinal`, `ordinal_num`, `year`, and `currency`.
```rust
use num2words::*;
assert_eq!(
Num2Words::new(42).lang(Lang::French).to_words(),
Ok(String::from("quarante-deux"))
);
assert_eq!(
Num2Words::new(42).ordinal().to_words(),
Ok(String::from("forty-second"))
);
assert_eq!(
Num2Words::new(42.01).currency(Currency::DOLLAR).to_words(),
Ok(String::from("forty-two dollars and one cent"))
);
```
These arguments can be chained.
For more information about the available languages, outputs types and
currencies, see [Information](#information).
### Binary
This crate provides a command-line interface to run requests on `num2words`.
Example:
```sh
$ num2words 42
forty-two
$ num2words 10 --to UAH --lang uk
десять гривень
```
You can download the app via the following command:
```sh
$ cargo install num2words
```
You can also change the language via the CLI argument `--lang [locale]` and
provide a specific output type or a currency with the argument
`--to [cardinal|ordinal|ordinal_num|year|ISO 4217]`.
For more information about the usage of `num2words` please refer to the docs
or via the following command:
```sh
$ num2words --help
```
## Information
### Supported languages
Here is a list of all of the supported languages:
| Flag | Code | Locale | Language | 42 |
| ---- | ----------------- | --------- | ----------- | ------------- |
| 🇺🇸🇬🇧 | `Lang::English` | `en` | English | forty-two |
| 🇫🇷🇨🇦 | `Lang::French` | `fr` | French | quarante-deux |
| 🇧🇪🇨🇩 | `Lang::French_BE` | `fr_BE` | French (BE) | quarante-deux |
| 🇨🇭 | `Lang::French_CH` | `fr_CH` | French (CH) | quarante-deux |
| 🇺🇦 | `Lang::Ukrainian` | `uk` | Ukrainian | сорок два |
This list can be expanded! Contributions are welcomed.
### Supported output types
Here is a list of all of the supported outputs types (with the associated
command-line interface code):
| Library method | CLI argument | Example output |
| ---------------- | ------------- | -------------------------------------- |
| `.cardinal()` | `cardinal` | forty-two (42) |
| `.ordinal()` | `ordinal` | forty-second (42) |
| `.ordinal_num()` | `ordinal_num` | 42nd (42) |
| `.year()` | `year` | nineteen oh-one (1901) |
| `.currency(cur)` | ISO 4217 code | forty-two dollars and one cent (42.01) |
### Supported currencies
Three-letter enum variants corresponds to the currency's ISO 4217 code, but
there are exceptions to accomodate generic terminologies: `DINAR`, `DOLLAR`,
`PESO` and `RIYAL`.
A summary of all of the supported currencies are available in the [documentation
of `Currency`](https://docs.rs/num2words/latest/num2words/enum.Currency.html).
### About
This library is widely inspired by [Savoir-faire Linux's Python
lib](https://github.com/savoirfairelinux/num2words/).
## License
Licensed under either of
- Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
- MIT license
([LICENSE-MIT](LICENSE-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.