+#[derive(Clone, Debug)]
+pub enum ClosureDescriptor {
+ ForceClosed,
+ UserInitiated,
+ CounterpartyInitiated,
+ CooperativeClosure,
+ UnknownOnchainCommitment,
+ ProcessingError,
+ DisconnectedPeer,
+}
+
+impl Writeable for ClosureDescriptor {
+ fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
+ match self {
+ ClosureDescriptor::ForceClosed => 0u8.write(writer)?,
+ ClosureDescriptor::UserInitiated => 1u8.write(writer)?,
+ ClosureDescriptor::CounterpartyInitiated => 2u8.write(writer)?,
+ ClosureDescriptor::CooperativeClosure => 3u8.write(writer)?,
+ ClosureDescriptor::UnknownOnchainCommitment => 4u8.write(writer)?,
+ ClosureDescriptor::ProcessingError => 5u8.write(writer)?,
+ ClosureDescriptor::DisconnectedPeer => 6u8.write(writer)?,
+ }
+ Ok(())
+ }
+}
+
+impl Readable for ClosureDescriptor {
+ fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Self, DecodeError> {
+ Ok(match <u8 as Readable>::read(reader)? {
+ 0 => ClosureDescriptor::ForceClosed,
+ 1 => ClosureDescriptor::UserInitiated,
+ 2 => ClosureDescriptor::CounterpartyInitiated,
+ 3 => ClosureDescriptor::CooperativeClosure,
+ 4 => ClosureDescriptor::UnknownOnchainCommitment,
+ 5 => ClosureDescriptor::ProcessingError,
+ 6 => ClosureDescriptor::DisconnectedPeer,
+ _ => return Err(DecodeError::InvalidValue),
+ })
+ }
+}
+