use crate::composition::Composition;
use crate::error::ProviderError;
use crate::precursor::{PrecursorCandidate, PrecursorSelection};
use crate::process::ProcessPrecedent;
use crate::reaction::{BalancedReaction, ReactionEnergy, ThermodynamicConditions};
use crate::target::{PlanningConstraints, TargetSpecification};
pub trait PrecursorCatalog {
fn candidates_for(
&self,
target: &Composition,
constraints: &PlanningConstraints,
) -> std::result::Result<Vec<PrecursorCandidate>, ProviderError>;
}
pub trait ThermodynamicProvider {
fn reaction_energy(
&self,
reaction: &BalancedReaction,
conditions: &ThermodynamicConditions,
) -> std::result::Result<Option<ReactionEnergy>, ProviderError>;
}
pub trait ProcessEvidenceProvider {
fn precedents(
&self,
target: &TargetSpecification,
precursors: &[PrecursorSelection],
) -> std::result::Result<Vec<ProcessPrecedent>, ProviderError>;
}