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}