fluentbase_types/system/
interruption_outcome.rs1use crate::ExitCode;
2use alloc::vec::Vec;
3use alloy_primitives::Bytes;
4use bincode::de::Decoder;
5
6#[derive(Default, Clone, Debug, PartialEq)]
7pub struct RuntimeInterruptionOutcomeV1 {
8 pub halted_frame: bool,
9 pub output: Bytes,
10 pub fuel_consumed: u64,
11 pub fuel_refunded: i64,
12 pub exit_code: ExitCode,
13}
14
15impl bincode::Encode for RuntimeInterruptionOutcomeV1 {
16 fn encode<E: bincode::enc::Encoder>(
17 &self,
18 e: &mut E,
19 ) -> Result<(), bincode::error::EncodeError> {
20 bincode::Encode::encode(&self.halted_frame, e)?;
21 bincode::Encode::encode(self.output.as_ref(), e)?;
22 bincode::Encode::encode(&self.fuel_consumed, e)?;
23 bincode::Encode::encode(&self.fuel_refunded, e)?;
24 let exit_code = self.exit_code.into_i32();
25 bincode::Encode::encode(&exit_code, e)?;
26 Ok(())
27 }
28}
29
30impl<C> bincode::Decode<C> for RuntimeInterruptionOutcomeV1 {
31 fn decode<D: Decoder<Context = C>>(d: &mut D) -> Result<Self, bincode::error::DecodeError> {
32 let halted_frame: bool = bincode::Decode::decode(d)?;
33 let output: Vec<u8> = bincode::Decode::decode(d)?;
34 let fuel_consumed: u64 = bincode::Decode::decode(d)?;
35 let fuel_refunded: i64 = bincode::Decode::decode(d)?;
36 let exit_code: i32 = bincode::Decode::decode(d)?;
37 Ok(Self {
38 halted_frame,
39 output: output.into(),
40 fuel_consumed,
41 fuel_refunded,
42 exit_code: exit_code.into(),
43 })
44 }
45}