pub mod options {
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum CompactDisplay {
Short,
Long,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub struct Currency(&'static str);
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum CurrencyDisplay {
Symbol,
NarrowSymbol,
Code,
Name,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum CurrencySign {
Accounting,
Standard,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum Notation {
Standard,
Scientific,
Engineering,
Compact,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub struct NumberingSystem(String);
impl Default for NumberingSystem {
fn default() -> Self {
NumberingSystem("latn".to_string())
}
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum SignDisplay {
Auto,
Never,
Always,
ExceptZero,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum Style {
Decimal,
Currency,
Percent,
Unit,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum UnitDisplay {
Long,
Short,
Narrow,
}
pub struct Unit(String);
}
pub struct Options {
compact_display: options::CompactDisplay,
currency: Option<options::Currency>,
currency_display: options::CurrencyDisplay,
currency_sign: options::CurrencySign,
notation: options::Notation,
numbering_system: options::NumberingSystem,
sign_display: options::SignDisplay,
style: options::Style,
unit: Option<options::Unit>,
}
impl Default for Options {
fn default() -> Self {
Options {
compact_display: options::CompactDisplay::Short,
currency: None,
currency_display: options::CurrencyDisplay::Symbol,
currency_sign: options::CurrencySign::Standard,
notation: options::Notation::Standard,
sign_display: options::SignDisplay::Auto,
style: options::Style::Decimal,
unit: None,
numbering_system: Default::default(),
}
}
}
use std::fmt;
pub trait NumberFormat {
type Error: std::error::Error;
fn try_new<L>(l: L, opts: Options) -> Result<Self, Self::Error>
where
L: crate::Locale,
Self: Sized;
fn format<W>(&self, number: f64, writer: &mut W) -> fmt::Result
where
W: fmt::Write;
}