casper_executor_wasm_common/
keyspace.rs1use num_derive::{FromPrimitive, ToPrimitive};
2
3#[repr(u64)]
4#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)]
5pub enum KeyspaceTag {
6 State = 0,
11 Context = 1,
14 NamedKey = 2,
16 PaymentInfo = 3,
18}
19
20#[repr(u64)]
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum Keyspace<'a> {
23 State,
27 Context(&'a [u8]),
30 NamedKey(&'a str),
32 PaymentInfo(&'a str),
34}
35
36impl Keyspace<'_> {
37 #[must_use]
38 pub fn as_tag(&self) -> KeyspaceTag {
39 match self {
40 Keyspace::State => KeyspaceTag::State,
41 Keyspace::Context(_) => KeyspaceTag::Context,
42 Keyspace::NamedKey(_) => KeyspaceTag::NamedKey,
43 Keyspace::PaymentInfo(_) => KeyspaceTag::PaymentInfo,
44 }
45 }
46
47 #[must_use]
48 pub fn as_u64(&self) -> u64 {
49 self.as_tag() as u64
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn test_as_tag_state() {
59 let keyspace = Keyspace::State;
60 assert_eq!(keyspace.as_tag(), KeyspaceTag::State);
61 }
62
63 #[test]
64 fn test_as_tag_context() {
65 let data = [1, 2, 3];
66 let keyspace = Keyspace::Context(&data);
67 assert_eq!(keyspace.as_tag(), KeyspaceTag::Context);
68 }
69
70 #[test]
71 fn test_as_tag_named_key() {
72 let name = "my_key";
73 let keyspace = Keyspace::NamedKey(name);
74 assert_eq!(keyspace.as_tag(), KeyspaceTag::NamedKey);
75 }
76
77 #[test]
78 fn test_as_u64_state() {
79 let keyspace = Keyspace::State;
80 assert_eq!(keyspace.as_u64(), 0);
81 }
82
83 #[test]
84 fn test_as_u64_context() {
85 let data = [1, 2, 3];
86 let keyspace = Keyspace::Context(&data);
87 assert_eq!(keyspace.as_u64(), 1);
88 }
89
90 #[test]
91 fn test_as_u64_named_key() {
92 let name = "my_key";
93 let keyspace = Keyspace::NamedKey(name);
94 assert_eq!(keyspace.as_u64(), 2);
95 }
96
97 #[test]
98 fn test_as_u64_payment_info() {
99 let name = "entry_point";
100 let keyspace: Keyspace = Keyspace::PaymentInfo(name);
101 assert_eq!(keyspace.as_u64(), 3);
102 }
103}