/// A resource containing a list of localization messages. /// /// [`FluentResource`] wraps an [`Abstract Syntax Tree`](../fluent_syntax/ast/index.html) produced by the /// [`parser`](../fluent_syntax/parser/index.html) and provides an access to a list /// of its entries. /// /// A good mental model for a resource is a single FTL file, but in the future /// there's nothing preventing a resource from being stored in a data base, /// pre-parsed format or in some other structured form. /// /// # Example /// /// ``` /// use fluent_bundle::FluentResource; /// /// let source = r#" /// /// hello-world = Hello World! /// /// "#; /// /// let resource = FluentResource::try_new(source.to_string()) /// .expect("Errors encountered while parsing a resource."); /// /// assert_eq!(resource.entries().count(), 1); /// ``` /// /// # Ownership /// /// A resource owns the source string and the AST contains references /// to the slices of the source. #[derive(Debug)] pubstruct FluentResource(InnerFluentResource);
impl FluentResource { /// A fallible constructor of a new [`FluentResource`]. /// /// It takes an encoded `Fluent Translation List` string, parses /// it and stores both, the input string and the AST view of it, /// for runtime use. /// /// # Example /// /// ``` /// use fluent_bundle::FluentResource; /// /// let source = r#" /// /// hello-world = Hello, { $user }! /// /// "#; /// /// let resource = FluentResource::try_new(source.to_string()); /// /// assert!(resource.is_ok()); /// ``` /// /// # Errors /// /// The method will return the resource irrelevant of parse errors /// encountered during parsing of the source, but in case of errors, /// the `Err` variant will contain both the structure and a vector /// of errors. pubfn try_new(source: String) -> Result<Self, (Self, Vec<ParserError>)> { letmut errors = None;
let res = InnerFluentResource::new(source, |source| match parse_runtime(source.as_str()) {
Ok(ast) => ast,
Err((ast, err)) => {
errors = Some(err);
ast
}
});
/// Returns a reference to the source string that was used /// to construct the [`FluentResource`]. /// /// # Example /// /// ``` /// use fluent_bundle::FluentResource; /// /// let source = "hello-world = Hello, { $user }!"; /// /// let resource = FluentResource::try_new(source.to_string()) /// .expect("Failed to parse FTL."); /// /// assert_eq!( /// resource.source(), /// "hello-world = Hello, { $user }!" /// ); /// ``` pubfn source(&self) -> &str {
&self.0.borrow_owner()
}
/// Returns an iterator over [`entries`](fluent_syntax::ast::Entry) of the [`FluentResource`]. /// /// # Example /// /// ``` /// use fluent_bundle::FluentResource; /// use fluent_syntax::ast; /// /// let source = r#" /// /// hello-world = Hello, { $user }! /// /// "#; /// /// let resource = FluentResource::try_new(source.to_string()) /// .expect("Failed to parse FTL."); /// /// assert_eq!( /// resource.entries().count(), /// 1 /// ); /// assert!(matches!(resource.entries().next(), Some(ast::Entry::Message(_)))); /// ``` pubfn entries(&self) -> impl Iterator<Item = &ast::Entry<&str>> { self.0.borrow_dependent().body.iter()
}
/// Returns an [`Entry`](fluent_syntax::ast::Entry) at the /// given index out of the [`FluentResource`]. /// /// # Example /// /// ``` /// use fluent_bundle::FluentResource; /// use fluent_syntax::ast; /// /// let source = r#" /// /// hello-world = Hello, { $user }! /// /// "#; /// /// let resource = FluentResource::try_new(source.to_string()) /// .expect("Failed to parse FTL."); /// /// assert!(matches!(resource.get_entry(0), Some(ast::Entry::Message(_)))); /// ``` pubfn get_entry(&self, idx: usize) -> Option<&ast::Entry<&str>> { self.0.borrow_dependent().body.get(idx)
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-20)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.