miden_project/dependencies/
version_requirement.rs1use core::fmt;
2
3#[cfg(feature = "serde")]
4use miden_assembly_syntax::debuginfo::SourceId;
5use miden_assembly_syntax::debuginfo::Span;
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9use super::*;
10#[cfg(feature = "serde")]
11use crate::ast::parsing::SetSourceId;
12use crate::{LexicographicWord, Word};
13
14#[derive(Debug, Clone)]
16#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17#[cfg_attr(feature = "serde", serde(rename_all = "lowercase"))]
18pub enum VersionRequirement {
19 Semantic(Span<VersionReq>),
27 Digest(Span<Word>),
36}
37
38impl VersionRequirement {
39 pub fn is_semantic_version(&self) -> bool {
41 matches!(self, Self::Semantic(_))
42 }
43
44 pub fn is_digest(&self) -> bool {
46 matches!(self, Self::Digest(_))
47 }
48}
49
50#[cfg(feature = "serde")]
51impl SetSourceId for VersionRequirement {
52 fn set_source_id(&mut self, source_id: SourceId) {
53 match self {
54 Self::Semantic(version) => version.set_source_id(source_id),
55 Self::Digest(digest) => digest.set_source_id(source_id),
56 }
57 }
58}
59
60impl Eq for VersionRequirement {}
61
62impl PartialEq for VersionRequirement {
63 fn eq(&self, other: &Self) -> bool {
64 match (self, other) {
65 (Self::Semantic(l), Self::Semantic(r)) => l == r,
66 (Self::Semantic(_), Self::Digest(_)) | (Self::Digest(_), Self::Semantic(_)) => false,
67 (Self::Digest(l), Self::Digest(r)) => {
68 LexicographicWord::new(l.into_inner()) == LexicographicWord::new(r.into_inner())
69 },
70 }
71 }
72}
73
74impl fmt::Display for VersionRequirement {
75 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
76 match self {
77 Self::Semantic(v) => fmt::Display::fmt(v, f),
78 Self::Digest(word) => fmt::Display::fmt(word, f),
79 }
80 }
81}
82
83impl From<VersionReq> for VersionRequirement {
84 fn from(version: VersionReq) -> Self {
85 Self::Semantic(Span::unknown(version))
86 }
87}
88
89impl From<Word> for VersionRequirement {
90 fn from(digest: Word) -> Self {
91 Self::Digest(Span::unknown(digest))
92 }
93}