# 📃 Reporting
## Non-Interruptible Software
```rust ,ignore
fn execute(params: Params) -> Value {
// ..
}
```
## Interruptible Software
```rust ,ignore
fn execute(params: Params) -> Outcome {
// ..
}
```
### Outcome
<details open>
<summary>Basic</summary>
```rust ,ignore
enum Outcome {
/// Execution completed, here is the return value.
Complete(Value),
/// Execution was interrupted.
Interrupted,
}
```
</details>
<details open>
<summary>Step Values</summary>
```rust ,ignore
enum Outcome {
/// Execution completed, here is the return value.
Complete(Value),
/// Execution was interrupted.
///
/// Here's the information we collected so far.
Interrupted {
step_1_value: Option<Step1Value>,
step_2_value: Option<Step2Value>,
step_3_value: Option<Step3Value>,
},
}
```
</details>
<details open>
<summary>Step Values and Execution Info</summary>
```rust ,ignore
enum Outcome {
/// Execution completed, here is the return value.
Complete(Value),
/// Execution was interrupted.
///
/// Here's the information we collected so far.
Interrupted {
step_1_value: Option<Step1Value>,
step_2_value: Option<Step2Value>,
step_3_value: Option<Step3Value>,
steps_processed: Vec<StepId>,
steps_not_processed: Vec<StepId>,
},
}
```
</details>