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 equal; 18 mod find; 19 mod parse; 20 mod serialize; 21 mod to_bits; 22 mod to_bits_raw; 23 mod to_fields; 24 mod to_fields_raw; 25 26 use crate::{Access, Argument, Entry, Future, Literal, Plaintext, Record}; 27 use alphavm_console_network::Network; 28 use alphavm_console_types::prelude::*; 29 30 #[derive(Clone)] 31 pub enum Value<N: Network> { 32 /// A plaintext value. 33 Plaintext(Plaintext<N>), 34 /// A record value. 35 Record(Record<N, Plaintext<N>>), 36 /// A future. 37 Future(Future<N>), 38 } 39 40 impl<N: Network> From<Literal<N>> for Value<N> { 41 /// Initializes the value from a literal. 42 fn from(literal: Literal<N>) -> Self { 43 Self::Plaintext(Plaintext::from(literal)) 44 } 45 } 46 47 impl<N: Network> From<&Literal<N>> for Value<N> { 48 /// Initializes the value from a literal. 49 fn from(literal: &Literal<N>) -> Self { 50 Self::from(Plaintext::from(literal)) 51 } 52 } 53 54 impl<N: Network> From<Plaintext<N>> for Value<N> { 55 /// Initializes the value from a plaintext. 56 fn from(plaintext: Plaintext<N>) -> Self { 57 Self::Plaintext(plaintext) 58 } 59 } 60 61 impl<N: Network> From<&Plaintext<N>> for Value<N> { 62 /// Initializes the value from a plaintext. 63 fn from(plaintext: &Plaintext<N>) -> Self { 64 Self::from(plaintext.clone()) 65 } 66 } 67 68 impl<N: Network> From<Record<N, Plaintext<N>>> for Value<N> { 69 /// Initializes the value from a record. 70 fn from(record: Record<N, Plaintext<N>>) -> Self { 71 Self::Record(record) 72 } 73 } 74 75 impl<N: Network> From<&Record<N, Plaintext<N>>> for Value<N> { 76 /// Initializes the value from a record. 77 fn from(record: &Record<N, Plaintext<N>>) -> Self { 78 Self::from(record.clone()) 79 } 80 } 81 82 impl<N: Network> From<Future<N>> for Value<N> { 83 /// Initializes the value from a future. 84 fn from(future: Future<N>) -> Self { 85 Self::Future(future) 86 } 87 } 88 89 impl<N: Network> From<&Future<N>> for Value<N> { 90 /// Initializes the value from a future. 91 fn from(future: &Future<N>) -> Self { 92 Self::from(future.clone()) 93 } 94 } 95 96 impl<N: Network> From<Argument<N>> for Value<N> { 97 /// Initializes the value from an argument. 98 fn from(argument: Argument<N>) -> Self { 99 match argument { 100 Argument::Plaintext(plaintext) => Self::Plaintext(plaintext), 101 Argument::Future(future) => Self::Future(future), 102 } 103 } 104 } 105 106 impl<N: Network> From<&Argument<N>> for Value<N> { 107 /// Initializes the value from an argument. 108 fn from(argument: &Argument<N>) -> Self { 109 Self::from(argument.clone()) 110 } 111 } 112 113 impl<N: Network> From<&Value<N>> for Value<N> { 114 /// Returns a clone of the value. 115 fn from(value: &Value<N>) -> Self { 116 value.clone() 117 } 118 } 119 120 impl<N: Network> TryFrom<Result<Value<N>>> for Value<N> { 121 type Error = Error; 122 123 /// Initializes a value from a result. 124 fn try_from(value: Result<Value<N>>) -> Result<Self> { 125 value 126 } 127 } 128 129 impl<N: Network> TryFrom<String> for Value<N> { 130 type Error = Error; 131 132 /// Initializes a value from a string. 133 fn try_from(value: String) -> Result<Self> { 134 Self::from_str(&value) 135 } 136 } 137 138 impl<N: Network> TryFrom<&String> for Value<N> { 139 type Error = Error; 140 141 /// Initializes a value from a string. 142 fn try_from(value: &String) -> Result<Self> { 143 Self::from_str(value) 144 } 145 } 146 147 impl<N: Network> TryFrom<&str> for Value<N> { 148 type Error = Error; 149 150 /// Initializes a value from a string. 151 fn try_from(value: &str) -> Result<Self> { 152 Self::from_str(value) 153 } 154 }