hive_console_sdk/supergraph_fetcher/
mod.rs1use tokio::sync::RwLock;
2use tokio::sync::TryLockError;
3
4use crate::circuit_breaker::CircuitBreakerError;
5use crate::supergraph_fetcher::async_fetcher::SupergraphFetcherAsyncState;
6use reqwest::header::HeaderValue;
7use reqwest::header::InvalidHeaderValue;
8
9pub mod async_fetcher;
10pub mod builder;
11pub mod sync_fetcher;
12
13#[derive(Debug)]
14pub struct SupergraphFetcher<State> {
15 state: State,
16 etag: RwLock<Option<HeaderValue>>,
17}
18
19impl SupergraphFetcher<SupergraphFetcherAsyncState> {
21 pub fn builder() -> builder::SupergraphFetcherBuilder {
22 builder::SupergraphFetcherBuilder::default()
23 }
24}
25
26pub enum LockErrorType {
27 Read,
28 Write,
29}
30
31#[derive(Debug, thiserror::Error)]
32pub enum SupergraphFetcherError {
33 #[error("Creating HTTP Client failed: {0}")]
34 HTTPClientCreation(reqwest::Error),
35 #[error("Network error: {0}")]
36 Network(reqwest_middleware::Error),
37 #[error("Parsing response failed: {0}")]
38 ResponseParse(reqwest::Error),
39 #[error("Reading the etag record failed: {0:?}")]
40 ETagRead(TryLockError),
41 #[error("Updating the etag record failed: {0:?}")]
42 ETagWrite(TryLockError),
43 #[error("Invalid CDN key: {0}")]
44 InvalidKey(InvalidHeaderValue),
45 #[error("Missing configuration option: {0}")]
46 MissingConfigurationOption(String),
47 #[error("Request rejected by circuit breaker")]
48 RejectedByCircuitBreaker,
49 #[error("Creating circuit breaker failed: {0}")]
50 CircuitBreakerCreation(CircuitBreakerError),
51}