workshop_rs/output/
convert.rs1use crate::catalog::{Catalog, Locale};
2use crate::core::error::Result;
3use crate::core::signatures::ExpectedDomain;
4use crate::frontend::parser;
5use crate::output::emitter::{self, EmitOptions};
6
7#[derive(Debug, Clone, Default, PartialEq, Eq)]
9#[non_exhaustive]
10pub struct ConvertOptions {
11 pub fallback_locale: Option<Locale>,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq)]
20#[non_exhaustive]
21pub struct Conversion {
22 pub text: String,
24 pub fallback_ids: Vec<String>,
28}
29
30pub fn convert(
34 input: &str,
35 catalog: &Catalog,
36 from: &Locale,
37 to: &Locale,
38 options: &ConvertOptions,
39) -> Result<Conversion> {
40 convert_with_context(input, catalog, from, to, options, catalog)
41}
42
43pub fn convert_with_context(
48 input: &str,
49 catalog: &Catalog,
50 from: &Locale,
51 to: &Locale,
52 options: &ConvertOptions,
53 context: &dyn ExpectedDomain,
54) -> Result<Conversion> {
55 let program = parser::parse_with_context(input, catalog, from, context)?;
56 let emit_options = EmitOptions {
57 fallback_locale: options.fallback_locale.clone(),
58 };
59 let output = emitter::emit_with_options(&program, catalog, to, &emit_options)?;
60 Ok(Conversion {
61 text: output.text,
62 fallback_ids: output.fallback_ids,
63 })
64}