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