use super::*;
impl<A: Aleo> From<Vec<Field<A>>> for Plaintext<A> {
fn from(fields: Vec<Field<A>>) -> Self {
Self::from_fields(&fields)
}
}
impl<A: Aleo> From<&[Field<A>]> for Plaintext<A> {
fn from(fields: &[Field<A>]) -> Self {
Self::from_fields(fields)
}
}
impl<A: Aleo> FromFields for Plaintext<A> {
type Field = Field<A>;
fn from_fields(fields: &[Self::Field]) -> Self {
if fields.len() > A::MAX_DATA_SIZE_IN_FIELDS as usize {
A::halt("Plaintext exceeds maximum allowed size")
}
let mut bits_le = fields
.iter()
.flat_map(|field| field.to_bits_le().into_iter().take(A::BaseField::size_in_data_bits()))
.rev();
for boolean in bits_le.by_ref() {
if boolean.eject_value() {
break;
}
}
Self::from_bits_le(&bits_le.rev().collect::<Vec<_>>())
}
}