/ console / program / src / data / access / mod.rs
mod.rs
 1  // Copyright (c) 2019-2025 Alpha-Delta Network Inc.
 2  // This file is part of the alphavm library.
 3  
 4  // Licensed under the Apache License, Version 2.0 (the "License");
 5  // you may not use this file except in compliance with the License.
 6  // You may obtain a copy of the License at:
 7  
 8  // http://www.apache.org/licenses/LICENSE-2.0
 9  
10  // Unless required by applicable law or agreed to in writing, software
11  // distributed under the License is distributed on an "AS IS" BASIS,
12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  // See the License for the specific language governing permissions and
14  // limitations under the License.
15  
16  mod bytes;
17  mod parse;
18  mod serialize;
19  
20  use crate::{Identifier, U32};
21  use alphavm_console_network::prelude::*;
22  
23  /// A helper type for accessing an entry in a register, struct, array, or record.
24  #[derive(Copy, Clone, PartialEq, Eq, Hash)]
25  pub enum Access<N: Network> {
26      /// Access a member of a register, struct, or record.
27      Member(Identifier<N>),
28      /// Access an element of an array.
29      Index(U32<N>),
30  }
31  
32  impl<N: Network> From<Identifier<N>> for Access<N> {
33      /// Initializes a new member access from an identifier.
34      #[inline]
35      fn from(identifier: Identifier<N>) -> Self {
36          Self::Member(identifier)
37      }
38  }
39  
40  impl<N: Network> From<U32<N>> for Access<N> {
41      /// Initializes a new index access from a u32.
42      #[inline]
43      fn from(index: U32<N>) -> Self {
44          Self::Index(index)
45      }
46  }