use super::{DecisionTrace, Nonclaim, OriginEdge, OriginTrail, TraceDecision, TraceEntry};
use crate::identity::{encode_bytes, encode_length};
impl OriginEdge {
pub fn encode_into(&self, into: &mut Vec<u8>) {
encode_bytes(self.from.as_bytes(), into);
into.push(self.relation.slot());
encode_bytes(self.to.as_bytes(), into);
}
}
impl OriginTrail {
pub fn encode_into(&self, into: &mut Vec<u8>) {
encode_length(self.edges().count(), into);
for edge in self.edges() {
edge.encode_into(into);
}
}
}
impl TraceDecision {
pub fn encode_into(&self, into: &mut Vec<u8>) {
into.push(self.slot());
match self {
Self::SelectedBecause(cited) | Self::OmittedBecause(cited) => {
encode_bytes(&cited.citation_bytes(), into);
}
Self::NotRun => encode_bytes(&[], into),
}
}
}
impl TraceEntry {
pub fn encode_into(&self, into: &mut Vec<u8>) {
encode_bytes(self.subject.as_bytes(), into);
self.decision.encode_into(into);
}
}
impl DecisionTrace {
pub fn encode_into(&self, into: &mut Vec<u8>) {
encode_length(self.entries().count(), into);
for entry in self.entries() {
entry.encode_into(into);
}
}
}
impl Nonclaim {
pub fn encode_into(&self, into: &mut Vec<u8>) {
encode_bytes(self.unclaimed.as_bytes(), into);
encode_bytes(&self.because.citation_bytes(), into);
}
}