use super::*;
use crate::data::literal::cast_lossy::CastLossy;
impl<E: Environment> Cast<Address<E>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<Address<E>> {
Ok(self.cast_lossy())
}
}
impl<E: Environment> Cast<Boolean<E>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<Boolean<E>> {
Ok(self.cast_lossy())
}
}
impl<E: Environment> Cast<Field<E>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<Field<E>> {
Ok(self.cast_lossy())
}
}
impl<E: Environment> Cast<Group<E>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<Group<E>> {
Ok(self.cast_lossy())
}
}
impl<E: Environment, I: IntegerType> Cast<Integer<E, I>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<Integer<E, I>> {
match **self {
true => Ok(Integer::one()),
false => Ok(Integer::zero()),
}
}
}
impl<E: Environment> Cast<Scalar<E>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<Scalar<E>> {
Ok(self.cast_lossy())
}
}
impl<E: Environment> Cast<IdentifierLiteral<E>> for Boolean<E> {
#[inline]
fn cast(&self) -> Result<IdentifierLiteral<E>> {
let field: Field<E> = self.cast()?;
field.cast()
}
}