1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*!
Idiomatic types for locale identifiers.

This crate provides a [`Locale`](locale/enum.Locale.html) enumeration,
[`LocaleIdentifier`](id/trait.LocaleIdentifier.html) trait, and a
[`LocaleString`](string/struct.LocaleString.html) structure are provided that
may be used to parse and construct locale identifiers in a
standards-conformant manner.

## Example

```
use locale_types::{LocaleIdentifier, LocaleString};

let locale = LocaleString::new("en".to_string()).unwrap()
    .with_territory("US".to_string()).unwrap()
    .with_code_set("UTF-8".to_string()).unwrap()
    .with_modifier("collation=pinyin;currency=CNY".to_string()).unwrap();
println!("{}", locale);
```

*/

#![warn(
    missing_debug_implementations,
    missing_docs,
    unused_extern_crates,
    rust_2018_idioms
)]

#[macro_use]
extern crate lazy_static;

// ------------------------------------------------------------------------------------------------
// Public Types
// ------------------------------------------------------------------------------------------------

/// Common error type for functions in this crate.
#[derive(Debug, PartialEq)]
pub enum LocaleError {
    /// The provided locale string was badly formatted
    InvalidLocaleString,
    /// The provided language code was not valid, or was unknown.
    InvalidLanguageCode,
    /// The provided territory code was not valid, or was unknown.
    InvalidTerritoryCode,
    /// The provided code set name was not valid, or was unknown.
    InvalidCodeSet,
    /// The provided modifier string was not valid, or was unknown.
    InvalidModifier,
    /// The provided locale was unknown
    UnknownLocale,
    /// Locale category not set/or supported
    UnsetCategory,
    /// Operating system could not set the specified locale
    OSError,
    /// The operation you tried to perform was not supported.
    Unsupported,
}

/// Common result type for functions in this crate.
pub type LocaleResult<T> = Result<T, LocaleError>;

// ------------------------------------------------------------------------------------------------
// Public Modules
// ------------------------------------------------------------------------------------------------

pub mod id;
pub use id::LocaleIdentifier;

pub mod string;
pub use string::LocaleString;

pub mod locale;
pub use locale::Locale;