snarkvm_console_program/data_types/value_type/
bytes.rsuse super::*;
impl<N: Network> ToBytes for ValueType<N> {
fn write_le<W: Write>(&self, mut writer: W) -> IoResult<()> {
u8::try_from(self.enum_index()).map_err(error)?.write_le(&mut writer)?;
match self {
Self::Constant(plaintext_type) => plaintext_type.write_le(&mut writer),
Self::Public(plaintext_type) => plaintext_type.write_le(&mut writer),
Self::Private(plaintext_type) => plaintext_type.write_le(&mut writer),
Self::Record(identifier) => identifier.write_le(&mut writer),
Self::ExternalRecord(locator) => locator.write_le(&mut writer),
Self::Future(locator) => locator.write_le(&mut writer),
}
}
}
impl<N: Network> FromBytes for ValueType<N> {
fn read_le<R: Read>(mut reader: R) -> IoResult<Self> {
let variant = u8::read_le(&mut reader)?;
match variant {
0 => Ok(Self::Constant(PlaintextType::read_le(&mut reader)?)),
1 => Ok(Self::Public(PlaintextType::read_le(&mut reader)?)),
2 => Ok(Self::Private(PlaintextType::read_le(&mut reader)?)),
3 => Ok(Self::Record(Identifier::read_le(&mut reader)?)),
4 => Ok(Self::ExternalRecord(Locator::read_le(&mut reader)?)),
5 => Ok(Self::Future(Locator::read_le(&mut reader)?)),
6.. => Err(error(format!("Failed to deserialize value type variant {variant}"))),
}
}
}