espforge_lib/resolver/strategies/
mod.rs1use crate::config::{Esp32Config, PlatformConfig};
2use crate::manifest::ParameterType;
3use anyhow::Result;
4use espforge_macros::auto_register_param_strategy;
5use inventory;
6use serde_yaml_ng::Value;
7
8pub mod component;
9pub mod hardware;
10pub struct ResolutionContext<'a> {
11 pub platform: &'a PlatformConfig,
12 pub hardware: Option<&'a Esp32Config>,
13}
14
15pub trait ParameterStrategy: Send + Sync {
16 fn resolve(&self, value: &Value, ctx: &ResolutionContext) -> Result<Value>;
17}
18
19pub type StrategyFactory = fn() -> (ParameterType, Box<dyn ParameterStrategy>);
20
21pub struct StrategyRegistration {
22 pub factory: StrategyFactory,
23}
24
25inventory::collect!(StrategyRegistration);
26
27#[macro_export]
28macro_rules! register_strategy {
29 ($param_type:expr, $strategy:ty) => {
30 inventory::submit! {
31 $crate::resolver::strategies::StrategyRegistration {
32 factory: || ($param_type, Box::new(<$strategy>::default()))
33 }
34 }
35 };
36}
37
38#[derive(Default)]
39#[auto_register_param_strategy(
40 ParameterType::String,
41 ParameterType::Integer,
42 ParameterType::Boolean
43)]
44pub struct PrimitiveStrategy;
45
46impl ParameterStrategy for PrimitiveStrategy {
47 fn resolve(&self, value: &Value, _ctx: &ResolutionContext) -> Result<Value> {
48 Ok(value.clone())
49 }
50}