snarkvm_console_program/data/literal/cast/boolean.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
16use super::*;
17use crate::data::literal::cast_lossy::CastLossy;
18
19impl<E: Environment> Cast<Address<E>> for Boolean<E> {
20 /// Casts a `Boolean` to an `Address`.
21 #[inline]
22 fn cast(&self) -> Result<Address<E>> {
23 Ok(self.cast_lossy())
24 }
25}
26
27impl<E: Environment> Cast<Boolean<E>> for Boolean<E> {
28 /// Casts a `Boolean` to a `Boolean`.
29 #[inline]
30 fn cast(&self) -> Result<Boolean<E>> {
31 Ok(self.cast_lossy())
32 }
33}
34
35impl<E: Environment> Cast<Field<E>> for Boolean<E> {
36 /// Casts a `Boolean` to a `Field`.
37 #[inline]
38 fn cast(&self) -> Result<Field<E>> {
39 Ok(self.cast_lossy())
40 }
41}
42
43impl<E: Environment> Cast<Group<E>> for Boolean<E> {
44 /// Casts a `Boolean` to a `Group`.
45 #[inline]
46 fn cast(&self) -> Result<Group<E>> {
47 Ok(self.cast_lossy())
48 }
49}
50
51impl<E: Environment, I: IntegerType> Cast<Integer<E, I>> for Boolean<E> {
52 /// Casts a `Boolean` to an `Integer`.
53 #[inline]
54 fn cast(&self) -> Result<Integer<E, I>> {
55 match **self {
56 true => Ok(Integer::one()),
57 false => Ok(Integer::zero()),
58 }
59 }
60}
61
62impl<E: Environment> Cast<Scalar<E>> for Boolean<E> {
63 /// Casts a `Boolean` to a `Scalar`.
64 #[inline]
65 fn cast(&self) -> Result<Scalar<E>> {
66 Ok(self.cast_lossy())
67 }
68}