(file: &ThemeFile, mode: ThemeMode)
| 291 | } |
| 292 | |
| 293 | fn build_theme(file: &ThemeFile, mode: ThemeMode) -> Theme { |
| 294 | let mut stack = Vec::new(); |
| 295 | let primary = resolve_theme_color(file, "primary", mode, &mut stack).unwrap_or(Color::Cyan); |
| 296 | let secondary = resolve_theme_color(file, "secondary", mode, &mut stack).unwrap_or(Color::Blue); |
| 297 | let info = resolve_theme_color(file, "info", mode, &mut stack).unwrap_or(primary); |
| 298 | let success = resolve_theme_color(file, "success", mode, &mut stack).unwrap_or(Color::Green); |
| 299 | let warning = resolve_theme_color(file, "warning", mode, &mut stack).unwrap_or(Color::Yellow); |
| 300 | let error = resolve_theme_color(file, "error", mode, &mut stack).unwrap_or(Color::Red); |
| 301 | |
| 302 | Theme { |
| 303 | text: resolve_theme_color(file, "text", mode, &mut stack).unwrap_or(Color::White), |
| 304 | text_muted: resolve_theme_color(file, "textMuted", mode, &mut stack) |
| 305 | .unwrap_or(Color::DarkGray), |
| 306 | background: resolve_theme_color(file, "background", mode, &mut stack) |
| 307 | .unwrap_or(Color::Reset), |
| 308 | background_panel: resolve_theme_color(file, "backgroundPanel", mode, &mut stack) |
| 309 | .unwrap_or(Color::Black), |
| 310 | background_element: resolve_theme_color(file, "backgroundElement", mode, &mut stack) |
| 311 | .unwrap_or(Color::DarkGray), |
| 312 | border: resolve_theme_color(file, "border", mode, &mut stack).unwrap_or(Color::Gray), |
| 313 | primary, |
| 314 | secondary, |
| 315 | success, |
| 316 | warning, |
| 317 | error, |
| 318 | info, |
| 319 | diff_added: resolve_theme_color(file, "diffAdded", mode, &mut stack).unwrap_or(success), |
| 320 | diff_removed: resolve_theme_color(file, "diffRemoved", mode, &mut stack).unwrap_or(error), |
| 321 | agent_colors: vec![ |
| 322 | primary, |
| 323 | secondary, |
| 324 | info, |
| 325 | success, |
| 326 | warning, |
| 327 | error, |
| 328 | resolve_theme_color(file, "accent", mode, &mut stack).unwrap_or(secondary), |
| 329 | resolve_theme_color(file, "markdownLink", mode, &mut stack).unwrap_or(primary), |
| 330 | ], |
| 331 | background_menu: resolve_theme_color(file, "backgroundMenu", mode, &mut stack).unwrap_or( |
| 332 | resolve_theme_color(file, "backgroundElement", mode, &mut stack).unwrap_or( |
| 333 | if mode == ThemeMode::Dark { |
| 334 | Color::Rgb(50, 50, 55) |
| 335 | } else { |
| 336 | Color::Rgb(220, 220, 225) |
| 337 | }, |
| 338 | ), |
| 339 | ), |
| 340 | border_active: resolve_theme_color(file, "borderActive", mode, &mut stack) |
| 341 | .unwrap_or(primary), |
| 342 | border_subtle: resolve_theme_color(file, "borderSubtle", mode, &mut stack).unwrap_or( |
| 343 | resolve_theme_color(file, "border", mode, &mut stack).unwrap_or(Color::Gray), |
| 344 | ), |
| 345 | markdown_heading: resolve_theme_color(file, "markdownHeading", mode, &mut stack) |
| 346 | .unwrap_or(primary), |
| 347 | markdown_link: resolve_theme_color(file, "markdownLink", mode, &mut stack).unwrap_or(info), |
| 348 | markdown_link_text: resolve_theme_color(file, "markdownLinkText", mode, &mut stack) |
| 349 | .unwrap_or(info), |
| 350 | markdown_code: resolve_theme_color(file, "markdownCode", mode, &mut stack).unwrap_or( |
no test coverage detected