Skip to main content

a3s_runtime/
error.rs

1use crate::contract::RuntimeLogDiscontinuityReason;
2use thiserror::Error;
3
4pub type RuntimeResult<T> = Result<T, RuntimeError>;
5
6#[derive(Debug, Error)]
7pub enum RuntimeError {
8    #[error("invalid Runtime request: {0}")]
9    InvalidRequest(String),
10    #[error("Runtime unit {unit_id:?} was not found")]
11    NotFound { unit_id: String },
12    #[error("Runtime request {request_id:?} conflicts with a prior request")]
13    RequestConflict { request_id: String },
14    #[error("Runtime request {request_id:?} for unit {unit_id:?} was not found")]
15    RequestNotFound { unit_id: String, request_id: String },
16    #[error(
17        "Runtime unit {unit_id:?} rejected stale generation {requested}; current generation is {current}"
18    )]
19    StaleGeneration {
20        unit_id: String,
21        requested: u64,
22        current: u64,
23    },
24    #[error("Runtime unit {unit_id:?} has conflicting content for generation {generation}")]
25    GenerationConflict { unit_id: String, generation: u64 },
26    #[error("Runtime request deadline has expired: {0}")]
27    DeadlineExceeded(String),
28    #[error("Runtime provider lacks required capabilities: {0:?}")]
29    UnsupportedCapabilities(Vec<String>),
30    #[error("Runtime provider is unavailable: {0}")]
31    ProviderUnavailable(String),
32    #[error("Runtime transport failed: {0}")]
33    Transport(String),
34    #[error(
35        "Runtime log source for unit {unit_id:?} generation {generation} is discontinuous: {reason:?}"
36    )]
37    LogDiscontinuity {
38        unit_id: String,
39        generation: u64,
40        cursor: Option<String>,
41        reason: RuntimeLogDiscontinuityReason,
42    },
43    #[error("Runtime protocol failed: {0}")]
44    Protocol(String),
45}