es_fluent_manager_core/embedded_localization/
bundle.rs1use fluent_bundle::FluentError;
2use unic_langid::LanguageIdentifier;
3
4#[derive(Clone, Debug, Eq, PartialEq)]
5pub struct BundleBuildError {
6 module_name: String,
7 language: LanguageIdentifier,
8 diagnostics: Vec<String>,
9}
10
11impl BundleBuildError {
12 pub(super) fn from_add_errors(
13 module_name: &str,
14 language: &LanguageIdentifier,
15 add_errors: Vec<Vec<FluentError>>,
16 ) -> Self {
17 let diagnostics = add_errors
18 .into_iter()
19 .enumerate()
20 .map(|(resource_index, errors)| {
21 let messages = errors
22 .into_iter()
23 .map(|error| error.to_string())
24 .collect::<Vec<_>>()
25 .join("; ");
26 format!("resource #{resource_index}: {messages}")
27 })
28 .collect();
29
30 Self {
31 module_name: module_name.to_string(),
32 language: language.clone(),
33 diagnostics,
34 }
35 }
36
37 pub fn module_name(&self) -> &str {
38 &self.module_name
39 }
40
41 pub fn language(&self) -> &LanguageIdentifier {
42 &self.language
43 }
44
45 pub fn diagnostics(&self) -> &[String] {
46 &self.diagnostics
47 }
48}
49
50impl std::fmt::Display for BundleBuildError {
51 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
52 write!(
53 f,
54 "failed to build a Fluent bundle for module '{}' and language '{}': {}",
55 self.module_name,
56 self.language,
57 self.diagnostics.join(" | ")
58 )
59 }
60}
61
62impl std::error::Error for BundleBuildError {}