use std::collections::HashMap;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::fieldgraph::{FieldId, NodeSpec};
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, Default)]
#[non_exhaustive]
pub struct FieldGraphSpec {
pub nodes: HashMap<FieldId, NodeSpec>,
pub semantics: HashMap<FieldId, FieldSemantics>,
}
impl FieldGraphSpec {
pub fn add(&mut self, id: &str, spec: NodeSpec) -> &mut Self {
self.nodes.insert(id.to_string(), spec);
self
}
pub fn set_semantics(&mut self, id: &str, semantics: FieldSemantics) -> &mut Self {
self.semantics.insert(id.to_string(), semantics);
self
}
pub fn add_with_semantics(
&mut self,
id: &str,
spec: NodeSpec,
semantics: FieldSemantics,
) -> &mut Self {
self.add(id, spec);
self.set_semantics(id, semantics);
self
}
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Clone, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum FieldSemantics {
Gate,
Probability,
}