rib/registry/
component_dependency_key.rs1use std::fmt::{Display, Formatter};
16use uuid::Uuid;
17
18#[derive(Debug, Hash, PartialEq, Eq, Clone, Ord, PartialOrd)]
19pub struct ComponentDependencyKey {
20 pub component_name: String,
21 pub component_id: Uuid,
22 pub component_version: u64,
23 pub root_package_name: Option<String>,
24 pub root_package_version: Option<String>,
25}
26
27impl bincode::Encode for ComponentDependencyKey {
28 fn encode<E: bincode::enc::Encoder>(
29 &self,
30 encoder: &mut E,
31 ) -> Result<(), bincode::error::EncodeError> {
32 use bincode::enc::write::Writer;
33
34 encoder.writer().write(self.component_name.as_bytes())?;
35 self.component_id.as_bytes().encode(encoder)?;
36 self.component_version.encode(encoder)?;
37 Option::<String>::encode(&self.root_package_name, encoder)?;
38 Option::<String>::encode(&self.root_package_version, encoder)?;
39
40 Ok(())
41 }
42}
43
44impl<Context> bincode::Decode<Context> for ComponentDependencyKey {
45 fn decode<D: bincode::de::Decoder>(
46 decoder: &mut D,
47 ) -> Result<Self, bincode::error::DecodeError> {
48 use bincode::de::read::Reader;
49
50 let component_name = String::decode(decoder)?;
51 let mut bytes = [0u8; 16];
52 decoder.reader().read(&mut bytes)?;
53 let component_id = Uuid::from_bytes(bytes);
54 let component_version = u64::decode(decoder)?;
55 let root_package_name = Option::<String>::decode(decoder)?;
56 let root_package_version = Option::<String>::decode(decoder)?;
57
58 Ok(ComponentDependencyKey {
59 component_name,
60 component_version,
61 component_id,
62 root_package_name,
63 root_package_version,
64 })
65 }
66}
67
68impl<'de, Context> bincode::BorrowDecode<'de, Context> for ComponentDependencyKey {
69 fn borrow_decode<D: bincode::de::BorrowDecoder<'de, Context = Context>>(
70 decoder: &mut D,
71 ) -> Result<Self, bincode::error::DecodeError> {
72 use bincode::de::read::Reader;
73
74 let component_name = String::borrow_decode(decoder)?;
75 let mut bytes = [0u8; 16];
76 decoder.reader().read(&mut bytes)?;
77 let component_id = Uuid::from_bytes(bytes);
78 let component_version = u64::borrow_decode(decoder)?;
79 let root_package_name = Option::<String>::borrow_decode(decoder)?;
80 let root_package_version = Option::<String>::borrow_decode(decoder)?;
81
82 Ok(ComponentDependencyKey {
83 component_name,
84 component_id,
85 component_version,
86 root_package_name,
87 root_package_version,
88 })
89 }
90}
91
92impl Display for ComponentDependencyKey {
93 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
94 write!(
95 f,
96 "Component: {}, ID: {}, Root Package: {}@{}",
97 self.component_name,
98 self.component_id,
99 self.root_package_name.as_deref().unwrap_or("unknown"),
100 self.root_package_version.as_deref().unwrap_or("unknown")
101 )
102 }
103}