use gpui::{AnyElement, App, Global, Window};
pub type BlockRenderer =
fn(language: &str, code: &str, &mut Window, &mut App) -> Option<AnyElement>;
struct Installed(BlockRenderer);
impl Global for Installed {}
pub fn set_block_renderer(cx: &mut App, renderer: BlockRenderer) {
cx.set_global(Installed(renderer));
}
pub(crate) fn render(
language: Option<&str>,
code: &str,
window: &mut Window,
cx: &mut App,
) -> Option<AnyElement> {
let renderer = cx.try_global::<Installed>()?.0;
renderer(language?, code, window, cx)
}