use alloc::string::String;
use alloc::sync::Arc;
use crate::line::{leptos, reactive_graph};
use leptos::text_prop::TextProp;
use oco_ref::Oco;
use reactive_graph::wrappers::read::Signal;
use crate::leptos::state::TextUse;
use crate::leptos::text::{self, Description};
use crate::{Tr, TrArgs, TrDyn, TrRich};
fn reader<D: Description>(description: D) -> impl Fn() -> String + Send + Sync + 'static {
#[cfg(feature = "ssr")]
{
let request = crate::leptos::catalog::current();
move || match &request {
Some(request) => request.in_zone(|| {
text::with_text(&description, request.catalog(), TextUse::Displayed, |t| {
String::from(t)
})
}),
None => String::new(),
}
}
#[cfg(not(feature = "ssr"))]
{
move || {
crate::leptos::catalog::track_locale();
text::to_string(&description, TextUse::Displayed)
}
}
}
macro_rules! prop_conversions {
($ty:ty) => {
impl From<$ty> for TextProp {
fn from(description: $ty) -> TextProp {
TextProp::from(reader(description))
}
}
impl From<$ty> for Signal<String> {
fn from(description: $ty) -> Signal<String> {
Signal::derive(reader(description))
}
}
impl From<$ty> for Oco<'static, str> {
fn from(description: $ty) -> Oco<'static, str> {
Oco::Counted(Arc::from(text::to_string(&description, TextUse::Displayed)))
}
}
};
}
prop_conversions!(Tr);
prop_conversions!(TrArgs);
prop_conversions!(TrRich);
prop_conversions!(TrDyn);