xmtp_api_d14n/queries/
mod.rs1mod 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}