espforge_lib/resolver/strategies/
mod.rs1use 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}