use serde::{Deserialize, Serialize};
use crate::{Key, PredicateAddress, Value};
#[cfg(feature = "schema")]
use schemars::JsonSchema;
pub type SolutionDataIndex = u16;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct Solution {
pub data: Vec<SolutionData>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct SolutionData {
pub predicate_to_solve: PredicateAddress,
pub decision_variables: Vec<Value>,
pub transient_data: Vec<Mutation>,
pub state_mutations: Vec<Mutation>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct Mutation {
pub key: Key,
pub value: Value,
}
impl Solution {
pub fn state_mutations_len(&self) -> usize {
self.data.iter().map(|d| d.state_mutations.len()).sum()
}
pub fn transient_data_len(&self) -> usize {
self.data.iter().map(|d| d.transient_data.len()).sum()
}
}