Bug 1928997: Update tabs icon in Unified Search popup r=desktop-theme-reviewers,daleh...
[gecko.git] / third_party / rust / fluent-bundle / src / errors.rs
blobec4a02c4b45d624d8ee09babb35fce373d93a73b
1 use crate::resolver::ResolverError;
2 use fluent_syntax::parser::ParserError;
3 use std::error::Error;
5 #[derive(Debug, PartialEq, Clone)]
6 pub enum EntryKind {
7     Message,
8     Term,
9     Function,
12 impl std::fmt::Display for EntryKind {
13     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14         match self {
15             Self::Message => f.write_str("message"),
16             Self::Term => f.write_str("term"),
17             Self::Function => f.write_str("function"),
18         }
19     }
22 /// Core error type for Fluent runtime system.
23 ///
24 /// It contains three main types of errors that may come up
25 /// during runtime use of the fluent-bundle crate.
26 #[derive(Debug, PartialEq, Clone)]
27 pub enum FluentError {
28     /// An error which occurs when
29     /// [`FluentBundle::add_resource`](crate::bundle::FluentBundle::add_resource)
30     /// adds entries that are already registered in a given [`FluentBundle`](crate::FluentBundle).
31     ///
32     /// # Example
33     ///
34     /// ```
35     /// use fluent_bundle::{FluentBundle, FluentResource};
36     /// use unic_langid::langid;
37     ///
38     /// let ftl_string = String::from("intro = Welcome, { $name }.");
39     /// let res1 = FluentResource::try_new(ftl_string)
40     ///     .expect("Could not parse an FTL string.");
41     ///
42     /// let ftl_string = String::from("intro = Hi, { $name }.");
43     /// let res2 = FluentResource::try_new(ftl_string)
44     ///     .expect("Could not parse an FTL string.");
45     ///
46     /// let langid_en = langid!("en-US");
47     /// let mut bundle = FluentBundle::new(vec![langid_en]);
48     ///
49     /// bundle.add_resource(&res1)
50     ///     .expect("Failed to add FTL resources to the bundle.");
51     ///
52     /// assert!(bundle.add_resource(&res2).is_err());
53     /// ```
54     Overriding {
55         kind: EntryKind,
56         id: String,
57     },
58     ParserError(ParserError),
59     ResolverError(ResolverError),
62 impl std::fmt::Display for FluentError {
63     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
64         match self {
65             Self::Overriding { kind, id } => {
66                 write!(f, "Attempt to override an existing {}: \"{}\".", kind, id)
67             }
68             Self::ParserError(err) => write!(f, "Parser error: {}", err),
69             Self::ResolverError(err) => write!(f, "Resolver error: {}", err),
70         }
71     }
74 impl Error for FluentError {}
76 impl From<ResolverError> for FluentError {
77     fn from(error: ResolverError) -> Self {
78         Self::ResolverError(error)
79     }
82 impl From<ParserError> for FluentError {
83     fn from(error: ParserError) -> Self {
84         Self::ParserError(error)
85     }