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
use fluent_bundle::FluentError; use std::error::Error; use unic_langid::LanguageIdentifier; #[derive(Debug, PartialEq)] pub enum LocalizationError { Bundle { error: FluentError, }, Resolver { id: String, locale: LanguageIdentifier, errors: Vec<FluentError>, }, MissingMessage { id: String, }, MissingValue { id: String, }, SyncRequestInAsyncMode, } impl From<FluentError> for LocalizationError { fn from(error: FluentError) -> Self { Self::Bundle { error } } } impl std::fmt::Display for LocalizationError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::Bundle { error } => write!(f, "[fluent][bundle] error: {}", error), Self::Resolver { id, locale, errors } => { let errors: Vec<String> = errors.iter().map(|err| err.to_string()).collect(); write!( f, "[fluent][resolver] errors in {}/{}: {}", locale.to_string(), id, errors.join(", ") ) } Self::MissingMessage { id } => write!(f, "[fluent] Missing message: {}", id), Self::MissingValue { id } => write!(f, "[fluent] Missing value in message: {}", id), Self::SyncRequestInAsyncMode => { write!(f, "Triggered synchronous format while in async mode") } } } } impl Error for LocalizationError {}