miden_mast_package/dependency/
mod.rs1use alloc::string::ToString;
2
3use miden_core::serde::{
4 ByteReader, ByteWriter, Deserializable, DeserializationError, Serializable,
5};
6
7use crate::{PackageId, TargetType, Version, Word};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
11#[cfg_attr(any(test, feature = "arbitrary"), derive(proptest_derive::Arbitrary))]
12#[cfg_attr(
13 all(feature = "arbitrary", test),
14 miden_test_serialization_macros::serialization_test
15)]
16pub struct Dependency {
17 pub name: PackageId,
19 pub kind: TargetType,
21 #[cfg_attr(any(test, feature = "arbitrary"), proptest(value = "Version::new(0, 0, 0)"))]
23 pub version: Version,
24 #[cfg_attr(any(test, feature = "arbitrary"), proptest(value = "Word::default()"))]
27 pub digest: Word,
28}
29
30impl Dependency {
31 pub fn id(&self) -> &PackageId {
33 &self.name
34 }
35
36 pub fn version(&self) -> &Version {
38 &self.version
39 }
40}
41
42impl Serializable for Dependency {
43 fn write_into<W: ByteWriter>(&self, target: &mut W) {
44 self.name.write_into(target);
45 self.kind.write_into(target);
46 self.version.to_string().write_into(target);
47 self.digest.write_into(target);
48 }
49}
50
51impl Deserializable for Dependency {
52 fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
53 let name = PackageId::read_from(source)?;
54 let kind = TargetType::read_from(source)?;
55 let version = alloc::string::String::read_from(source)?
56 .parse::<Version>()
57 .map_err(|err| DeserializationError::InvalidValue(err.to_string()))?;
58 let digest = Word::read_from(source)?;
59 Ok(Self { name, kind, version, digest })
60 }
61}