espforge_lib/resolver/strategies/
mod.rs

1use crate::config::{Esp32Config, PlatformConfig};
2use crate::manifest::ParameterType;
3use anyhow::Result;
4use inventory;
5use serde_yaml_ng::Value;
6
7pub mod component;
8pub mod utils;
9pub mod views;
10pub mod gpio;
11pub mod i2c;
12pub mod spi;
13pub mod uart;
14
15
16pub use utils::ValueExt; 
17pub struct ResolutionContext<'a> {
18    pub platform: &'a PlatformConfig,
19    pub hardware: Option<&'a Esp32Config>,
20}
21
22pub trait ParameterStrategy: Send + Sync {
23    fn resolve(&self, value: &Value, ctx: &ResolutionContext) -> Result<Value>;
24}
25
26pub type StrategyFactory = fn() -> (ParameterType, Box<dyn ParameterStrategy>);
27
28pub struct StrategyRegistration {
29    pub factory: StrategyFactory,
30}
31
32inventory::collect!(StrategyRegistration);
33
34#[macro_export]
35macro_rules! register_strategy {
36    ($param_type:expr, $strategy:ty) => {
37        inventory::submit! {
38            $crate::resolver::strategies::StrategyRegistration {
39                factory: || ($param_type, Box::new(<$strategy>::default()))
40            }
41        }
42    };
43}