agent_effects_store/
error.rs1use std::error::Error;
2use std::time::SystemTime;
3
4use crate::id::{EffectId, WorkerId};
5use crate::state::InvalidTransition;
6
7#[derive(Debug, thiserror::Error)]
9#[non_exhaustive]
10pub enum StoreError {
11 #[error("effect {0} not found")]
13 NotFound(EffectId),
14 #[error(transparent)]
16 InvalidTransition(#[from] InvalidTransition),
17 #[error("effect changed concurrently: expected version {expected}, found {actual}")]
19 VersionConflict {
20 expected: u64,
22 actual: u64,
24 },
25 #[error("lease is held by {owner} until {expires_at:?}")]
27 LeaseHeld {
28 owner: WorkerId,
30 expires_at: SystemTime,
32 },
33 #[error("lease lost: it expired or another worker took over")]
36 LeaseLost,
37 #[error("store backend error: {0}")]
39 Backend(#[source] Box<dyn Error + Send + Sync>),
40}
41
42impl StoreError {
43 pub fn backend(error: impl Into<Box<dyn Error + Send + Sync>>) -> Self {
45 Self::Backend(error.into())
46 }
47}