pub use cast::Cast;
pub use cast_lossy::CastLossy;
mod bytes;
mod cast;
mod cast_lossy;
mod equal;
mod from_bits;
mod parse;
mod sample;
mod serialize;
mod size_in_bits;
mod size_in_bytes;
mod to_bits;
mod to_type;
mod variant;
use crate::{LiteralType, ProgramID};
use snarkvm_console_account::{ComputeKey, PrivateKey, Signature};
use snarkvm_console_network::Network;
use snarkvm_console_types::{Boolean, prelude::*};
#[derive(Clone)]
pub enum Literal<N: Network> {
Address(Address<N>),
Boolean(Boolean<N>),
Field(Field<N>),
Group(Group<N>),
I8(I8<N>),
I16(I16<N>),
I32(I32<N>),
I64(I64<N>),
I128(I128<N>),
U8(U8<N>),
U16(U16<N>),
U32(U32<N>),
U64(U64<N>),
U128(U128<N>),
Scalar(Scalar<N>),
Signature(Box<Signature<N>>),
String(StringType<N>),
Identifier(Box<IdentifierLiteral<N>>),
}
macro_rules! impl_from {
($($name: ident)*) => {
$(
impl<N: Network> From<$name<N>> for Literal<N> {
fn from(value: $name<N>) -> Self {
Literal::$name(value)
}
}
)*
};
}
impl_from! {
Address Boolean Field Group
I8 I16 I32 I64 I128
U8 U16 U32 U64 U128
Scalar
}
impl<N: Network> From<Signature<N>> for Literal<N> {
fn from(value: Signature<N>) -> Self {
Literal::Signature(Box::new(value))
}
}