Skip to main content

fluentbase_types/system/
interruption_outcome.rs

1use 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}