1mod rose_pine;
2
3pub use rose_pine::*;
4
5use anyhow::{Context, Result};
6use gpui3::serde_json;
7use serde::Deserialize;
8use ui::Theme;
9
10use crate::assets::Assets;
11
12#[derive(Deserialize)]
13struct LegacyTheme {
14 pub base_theme: serde_json::Value,
15}
16
17/// Loads the [`Theme`] with the given name.
18pub fn load_theme(name: String) -> Result<Theme> {
19 let theme_contents = Assets::get(&format!("themes/{name}.json"))
20 .with_context(|| format!("theme file not found: '{name}'"))?;
21
22 let legacy_theme: LegacyTheme =
23 serde_json::from_str(std::str::from_utf8(&theme_contents.data)?)
24 .context("failed to parse legacy theme")?;
25
26 let theme: Theme = serde_json::from_value(legacy_theme.base_theme.clone())
27 .context("failed to parse `base_theme`")?;
28
29 Ok(theme)
30}