Skip to main content

PropertyError

Enum PropertyError 

Source
pub enum PropertyError {
    ReadLockError {
        context: String,
    },
    WriteLockError {
        context: String,
    },
    ObserverNotFound {
        id: usize,
    },
    PoisonedLock,
    ObserverError {
        reason: String,
    },
    ThreadPoolExhausted,
    InvalidConfiguration {
        reason: String,
    },
    PersistenceError {
        reason: String,
    },
    NoHistory {
        reason: String,
    },
    ValidationError {
        reason: String,
    },
}
Expand description

Errors that can occur when working with ObservableProperty

§Note on Lock Poisoning

This implementation uses graceful degradation for poisoned locks. When a lock is poisoned (typically due to a panic in an observer or another thread), the library automatically recovers the inner value using PoisonError::into_inner().

This means:

  • All operations continue to work even after a lock is poisoned
  • No ReadLockError, WriteLockError, or PoisonedLock errors will occur in practice
  • The system remains operational and observers continue to function

The error variants are kept for backward compatibility and potential future use cases, but with the current implementation, poisoned locks are transparent to users.

§Production Benefit

This approach ensures maximum availability and resilience in production systems where a misbehaving observer shouldn’t bring down the entire property system.

Variants§

§

ReadLockError

Failed to acquire a read lock on the property

Note: With graceful degradation, this error is unlikely to occur in practice as poisoned locks are automatically recovered.

Fields

§context: String

Context describing what operation was being attempted

§

WriteLockError

Failed to acquire a write lock on the property

Note: With graceful degradation, this error is unlikely to occur in practice as poisoned locks are automatically recovered.

Fields

§context: String

Context describing what operation was being attempted

§

ObserverNotFound

Attempted to unsubscribe an observer that doesn’t exist

Fields

§id: usize

The ID of the observer that wasn’t found

§

PoisonedLock

The property’s lock has been poisoned due to a panic in another thread

Note: With graceful degradation, this error will not occur in practice as the implementation automatically recovers from poisoned locks.

§

ObserverError

An observer function encountered an error during execution

Fields

§reason: String

Description of what went wrong

§

ThreadPoolExhausted

The thread pool for async notifications is exhausted

§

InvalidConfiguration

Invalid configuration was provided

Fields

§reason: String

Description of the invalid configuration

§

PersistenceError

Failed to persist the property value

Fields

§reason: String

Description of the persistence error

§

NoHistory

Attempted to undo when no history is available

Fields

§reason: String

Description of the issue

§

ValidationError

Validation failed for the provided value

Fields

§reason: String

Description of why validation failed

Trait Implementations§

Source§

impl Clone for PropertyError

Source§

fn clone(&self) -> PropertyError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PropertyError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PropertyError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for PropertyError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.