use super::CodecIssue;
use crate::identity::encode_bytes;
impl CodecIssue {
#[must_use]
pub fn canonical_bytes(&self) -> Vec<u8> {
let mut bytes = Vec::new();
self.encode_into(&mut bytes);
bytes
}
pub fn encode_into(&self, into: &mut Vec<u8>) {
into.push(self.slot());
let mut material = Vec::new();
self.material_into(&mut material);
encode_bytes(&material, into);
}
fn material_into(&self, into: &mut Vec<u8>) {
match self {
Self::PathSegmentsAbsent
| Self::MemberSpellingAbsent
| Self::AssemblyRoadAbsent
| Self::MembersAbsent => {}
Self::SegmentNotAnIdentifier { segment } => encode_bytes(segment.as_bytes(), into),
Self::MemberSpellingNotAnIdentifier { spelling }
| Self::MemberSpellingDoubled { spelling }
| Self::AssemblyRoadNotAnIdentifier { spelling }
| Self::RefusalSpellingNotAnIdentifier { spelling }
| Self::ModuleSpellingNotAnIdentifier { spelling } => {
encode_bytes(spelling.as_bytes(), into);
}
Self::MemberShadowsBinding { spelling, binding } => {
encode_bytes(spelling.as_bytes(), into);
encode_bytes(binding.as_bytes(), into);
}
Self::PathSegmentsUnbounded { bound, observed }
| Self::MembersUnbounded { bound, observed } => {
into.extend_from_slice(&bound.to_be_bytes());
into.extend_from_slice(&observed.to_be_bytes());
}
}
}
}