use fluent::{FluentArgs, FluentValue};
use std::borrow::Cow;
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MessageArguments<'a> {
#[serde(flatten)]
inner: HashMap<Cow<'a, str>, MessageValue<'a>>,
}
impl<'a> MessageArguments<'a> {
pub fn into_fluent_args(self) -> FluentArgs<'a> {
let mut args = FluentArgs::new();
for (name, value) in self.inner {
args.set(name, value);
}
args
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(untagged)]
pub enum MessageValue<'a> {
String(Cow<'a, str>),
Float(f64),
Null,
}
impl<'a> From<MessageValue<'a>> for FluentValue<'a> {
fn from(value: MessageValue<'a>) -> FluentValue<'a> {
match value {
MessageValue::String(value) => FluentValue::String(value),
MessageValue::Float(value) => FluentValue::Number(value.into()),
MessageValue::Null => FluentValue::None,
}
}
}