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}