#[non_exhaustive]pub enum BraidError {
Show 20 variants
Http(String),
Io(Error),
HeaderParse(String),
BodyParse(String),
InvalidVersion(String),
Subscription(String),
Json(Error),
SubscriptionClosed,
InvalidSubscriptionStatus(u16),
Protocol(String),
Timeout,
Aborted,
Fs(String),
InvalidUtf8(FromUtf8Error),
Config(String),
Internal(String),
HistoryDropped,
MergeConflict(String),
Notify(Error),
Anyhow(String),
}Expand description
Errors that can occur during Braid HTTP operations.
Each variant represents a different failure mode when working with Braid protocol. Use pattern matching to handle specific errors appropriately.
§Examples
use crate::core::BraidError;
fn handle_error(err: BraidError) {
match err {
BraidError::HistoryDropped => {
println!("Server dropped history, restarting sync");
},
BraidError::Timeout => {
println!("Retrying operation...");
},
_ => eprintln!("Error: {}", err),
}
}Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Http(String)
HTTP request failed with a given error message.
This includes cases where the server returns an unexpected status code or the request cannot be completed.
Io(Error)
Network I/O error (connection failed, read/write error, etc.).
These errors are typically retryable.
HeaderParse(String)
Failed to parse Braid protocol headers.
Indicates the server sent malformed Version, Parents, Merge-Type, or other Braid-specific headers (Section 2 and 3).
BodyParse(String)
Failed to parse protocol body.
The response body is malformed or doesn’t match the declared format.
InvalidVersion(String)
Invalid version format (not a valid version identifier).
Version IDs must be valid JSON strings or integers (RFC 8941).
Subscription(String)
Subscription-specific error.
Includes issues with subscription setup, maintenance, or unexpected closure.
Json(Error)
JSON serialization or deserialization error.
Indicates a problem encoding or decoding JSON in request/response bodies.
SubscriptionClosed
Subscription closed unexpectedly.
The server closed the connection while a subscription was active. This is a retryable error - the client should resume the subscription.
InvalidSubscriptionStatus(u16)
Invalid subscription status (expected 209)
Protocol(String)
Protocol violation error
Timeout
Operation timed out.
Aborted
Request was aborted.
Fs(String)
Filesystem error (notify, mapping, etc.)
InvalidUtf8(FromUtf8Error)
Invalid UTF-8 sequence in response.
Response body or headers contain invalid UTF-8 encoding.
Config(String)
Configuration error in Braid setup.
Invalid parameters were provided when creating a client or server.
Internal(String)
Internal error in the library.
Indicates a bug or unexpected state in the implementation.
HistoryDropped
Server has dropped version history (HTTP 410 Gone - Section 4.5).
Not retryable. The server has discarded history before the requested version. The client must restart synchronization from scratch by clearing its local state. This error signals that the parents requested are no longer available on the server.
MergeConflict(String)
Conflicting versions detected in merge (HTTP 293 - Section 2.2).
Notify(Error)
Notify/Watcher error.
Anyhow(String)
Generic anyhow error (temporary for conversion).
Implementations§
Source§impl BraidError
impl BraidError
Sourcepub fn is_retryable(&self) -> bool
pub fn is_retryable(&self) -> bool
Check if this error is retryable.
Returns true for transient errors that may succeed on retry:
- Network timeouts
- I/O errors
- HTTP 408, 425, 429, 502, 503, 504
Returns false for permanent errors:
- Protocol violations
- History dropped
- Access denied
§Examples
use crate::core::BraidError;
assert!(BraidError::Timeout.is_retryable());
assert!(!BraidError::HistoryDropped.is_retryable());Sourcepub fn is_access_denied(&self) -> bool
pub fn is_access_denied(&self) -> bool
Check if this is an access denied error.
Returns true for HTTP 401 (Unauthorized) or 403 (Forbidden).
§Examples
use crate::core::BraidError;
let err = BraidError::Http("401 Unauthorized".into());
assert!(err.is_access_denied());Trait Implementations§
Source§impl Debug for BraidError
impl Debug for BraidError
Source§impl Display for BraidError
impl Display for BraidError
Source§impl Error for BraidError
impl Error for BraidError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl From<Error> for BraidError
impl From<Error> for BraidError
Source§impl From<Error> for BraidError
impl From<Error> for BraidError
Source§impl From<Error> for BraidError
impl From<Error> for BraidError
Source§impl From<Error> for BraidError
impl From<Error> for BraidError
Source§impl From<FromUtf8Error> for BraidError
impl From<FromUtf8Error> for BraidError
Source§fn from(source: FromUtf8Error) -> Self
fn from(source: FromUtf8Error) -> Self
Auto Trait Implementations§
impl Freeze for BraidError
impl !RefUnwindSafe for BraidError
impl Send for BraidError
impl Sync for BraidError
impl Unpin for BraidError
impl !UnwindSafe for BraidError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.