xmtp_api_d14n/queries/
mod.rs

1mod api_stats;
2mod boxed_streams;
3mod builder;
4mod client_bundle;
5mod combinators;
6mod combined;
7mod d14n;
8pub mod stream;
9mod v3;
10
11pub use api_stats::*;
12pub use boxed_streams::*;
13pub use builder::*;
14pub use client_bundle::*;
15pub use combinators::*;
16pub use combined::*;
17pub use d14n::*;
18pub use stream::*;
19pub use v3::*;
20
21use std::error::Error as StdError;
22use xmtp_common::{MaybeSend, MaybeSync, RetryableError, retryable};
23use xmtp_proto::{
24    ConversionError,
25    api::{ApiClientError, BodyError},
26};
27
28#[derive(thiserror::Error, Debug)]
29pub enum QueryError<E: StdError> {
30    #[error(transparent)]
31    ApiClient(#[from] ApiClientError<E>),
32    #[error(transparent)]
33    Envelope(#[from] crate::protocol::EnvelopeError),
34    #[error(transparent)]
35    Conversion(#[from] ConversionError),
36    #[error(transparent)]
37    Body(#[from] BodyError),
38}
39
40impl<E> From<crate::protocol::EnvelopeError> for ApiClientError<E>
41where
42    E: StdError + MaybeSend + MaybeSync,
43{
44    fn from(e: crate::protocol::EnvelopeError) -> ApiClientError<E> {
45        ApiClientError::Other(Box::new(e))
46    }
47}
48
49impl<E> RetryableError for QueryError<E>
50where
51    E: StdError + RetryableError + 'static,
52{
53    fn is_retryable(&self) -> bool {
54        match self {
55            Self::ApiClient(c) => retryable!(c),
56            Self::Envelope(_e) => false,
57            Self::Conversion(_c) => false,
58            Self::Body(b) => retryable!(b),
59        }
60    }
61}