radix_engine/vm/
versions.rs1use radix_common::ScryptoSbor;
2
3#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd)]
4#[repr(u8)]
5pub enum ScryptoVmVersion {
6 V1_0,
7 V1_1,
8 V1_2,
9}
10
11impl ScryptoVmVersion {
12 pub const fn latest() -> ScryptoVmVersion {
13 Self::cuttlefish()
14 }
15
16 pub const fn babylon_genesis() -> ScryptoVmVersion {
17 Self::V1_0
18 }
19
20 pub const fn anemone() -> ScryptoVmVersion {
21 Self::V1_1
22 }
23
24 pub const fn cuttlefish() -> ScryptoVmVersion {
25 Self::V1_2
26 }
27
28 pub const fn crypto_utils_v1() -> ScryptoVmVersion {
29 Self::V1_1
30 }
31
32 pub const fn crypto_utils_v2() -> ScryptoVmVersion {
33 Self::V1_2
34 }
35}
36
37impl From<ScryptoVmVersion> for u64 {
38 fn from(version: ScryptoVmVersion) -> Self {
39 version as u64
40 }
41}
42
43impl TryFrom<u64> for ScryptoVmVersion {
44 type Error = ScryptoVmVersionError;
45
46 fn try_from(version: u64) -> Result<Self, Self::Error> {
47 match version {
48 0 => Ok(Self::V1_0),
49 1 => Ok(Self::V1_1),
50 2 => Ok(Self::V1_2),
51 v => Err(Self::Error::FromIntError(v)),
52 }
53 }
54}
55
56#[derive(Debug, Clone, Eq, PartialEq, ScryptoSbor)]
57pub enum ScryptoVmVersionError {
58 FromIntError(u64),
59}
60
61#[cfg(test)]
62mod test {
63 use super::*;
64
65 #[test]
66 fn test_scrypto_vm_version() {
67 let v = ScryptoVmVersion::latest();
68 assert_eq!(v, ScryptoVmVersion::V1_2);
69 assert_eq!(ScryptoVmVersion::crypto_utils_v1(), ScryptoVmVersion::V1_1);
70 }
71
72 #[test]
73 fn test_scrypto_vm_version_conversions() {
74 let v: u64 = ScryptoVmVersion::V1_1.into();
75 assert_eq!(v, 1);
76
77 let v: ScryptoVmVersion = 1u64.try_into().unwrap();
78 assert_eq!(v, ScryptoVmVersion::V1_1);
79
80 let e = ScryptoVmVersion::try_from(3u64).unwrap_err();
81
82 assert_eq!(e, ScryptoVmVersionError::FromIntError(3u64));
83 }
84
85 #[test]
86 fn test_scrypto_vm_version_ordering() {
87 assert!(ScryptoVmVersion::crypto_utils_v1() == ScryptoVmVersion::V1_1);
88 assert!(ScryptoVmVersion::crypto_utils_v1() > ScryptoVmVersion::V1_0);
89 assert!(ScryptoVmVersion::crypto_utils_v1() < ScryptoVmVersion::crypto_utils_v2());
90 }
91}