snarkvm_console_program/data/access/mod.rs
1// Copyright 2024 Aleo Network Foundation
2// This file is part of the snarkVM 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
16mod bytes;
17mod parse;
18mod serialize;
19
20use crate::{Identifier, U32};
21use snarkvm_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)]
25pub 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
32impl<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
40impl<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}