use super::*;
impl<N: Network> TryFrom<Vec<Field<N>>> for Plaintext<N> {
type Error = Error;
fn try_from(fields: Vec<Field<N>>) -> Result<Self, Self::Error> {
Self::from_fields(&fields)
}
}
impl<N: Network> TryFrom<&[Field<N>]> for Plaintext<N> {
type Error = Error;
fn try_from(fields: &[Field<N>]) -> Result<Self, Self::Error> {
Self::from_fields(fields)
}
}
impl<N: Network> FromFields for Plaintext<N> {
type Field = Field<N>;
fn from_fields(fields: &[Self::Field]) -> Result<Self> {
if fields.len() > N::MAX_DATA_SIZE_IN_FIELDS as usize {
bail!("Plaintext exceeds maximum allowed size")
}
let mut bits_le =
fields.iter().flat_map(|field| field.to_bits_le().into_iter().take(Field::<N>::size_in_data_bits())).rev();
for boolean in bits_le.by_ref() {
if boolean {
break;
}
}
Self::from_bits_le(&bits_le.rev().collect::<Vec<_>>())
}
}