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
/*!
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())
    .with_territory("US".to_string())
    .with_code_set("UTF-8".to_string())
    .with_modifier("collation=pinyin;currency=CNY".to_string());
println!("{}", locale);
```

*/

#[macro_use]
extern crate lazy_static;
extern crate regex;

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

/// Common error type for functions in this crate.
#[derive(Debug)]
pub enum LocaleError {
    /// The provided locale string was badly formatted
    InvalidLocaleString,
    /// 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;