use std::collections::BTreeMap;
use serde_json::Value;
use crate::presets::{Preset, Registry, ResolveError, ResolvedPreset, resolve};
pub trait PresetResolver: Send + Sync + 'static {
fn get(&self, id: &str) -> Option<Preset>;
fn resolve(
&self,
preset: &Preset,
custom_schema: Option<Value>,
context: &BTreeMap<String, String>,
) -> Result<ResolvedPreset, ResolveError>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct CorePresetResolver;
impl PresetResolver for CorePresetResolver {
fn get(&self, id: &str) -> Option<Preset> {
Registry::global().get(id).cloned()
}
fn resolve(
&self,
preset: &Preset,
custom_schema: Option<Value>,
context: &BTreeMap<String, String>,
) -> Result<ResolvedPreset, ResolveError> {
resolve(preset, custom_schema, context)
}
}