1use std::sync::Arc;
2
3use axum::extract::FromRef;
4use axum_extra::extract::cookie::Key;
5use flume::Sender;
6use kellnr_common::background_tasks::BackgroundTasks;
7use kellnr_common::cratesio_prefetch_msg::CratesioPrefetchMsg;
8use kellnr_cratesio_sync::CratesioSync;
9use kellnr_db::DbProvider;
10use kellnr_db::download_counter::DownloadCounter;
11use kellnr_filter::DownloadFilters;
12use kellnr_settings::{Settings, SettingsProv};
13use kellnr_storage::cratesio_crate_storage::CratesIoCrateStorage;
14use kellnr_storage::docs_storage::DocsStorage;
15use kellnr_storage::kellnr_crate_storage::KellnrCrateStorage;
16use kellnr_storage::toolchain_storage::ToolchainStorage;
17use reqwest::Client;
18
19use crate::login_throttle::LoginThrottle;
20use crate::token_cache::TokenCacheManager;
21
22pub type AppState = axum::extract::State<AppStateData>;
23
24pub type DbState = axum::extract::State<Arc<dyn DbProvider>>;
26pub type SettingsState = axum::extract::State<Arc<Settings>>;
27pub type SettingsProvState = axum::extract::State<Arc<SettingsProv>>;
28pub type DocsStorageState = axum::extract::State<Arc<DocsStorage>>;
29pub type CratesIoPrefetchSenderState = axum::extract::State<Sender<CratesioPrefetchMsg>>;
30pub type TokenCacheState = axum::extract::State<Arc<TokenCacheManager>>;
31pub type LoginThrottleState = axum::extract::State<Arc<LoginThrottle>>;
32pub type ToolchainStorageState = axum::extract::State<Option<Arc<ToolchainStorage>>>;
33pub type ProxyClientState = axum::extract::State<Client>;
34pub type BackgroundTasksState = axum::extract::State<BackgroundTasks>;
35
36#[derive(Clone, FromRef)]
37pub struct AppStateData {
38 pub db: Arc<dyn DbProvider>,
39 pub signing_key: Key,
41 pub settings: Arc<Settings>,
42 pub settings_prov: Arc<SettingsProv>,
45 pub crate_storage: Arc<KellnrCrateStorage>,
46 pub cratesio_storage: Arc<CratesIoCrateStorage>,
47 pub docs_storage: Arc<DocsStorage>,
51 pub cratesio_prefetch_sender: Sender<CratesioPrefetchMsg>,
52 pub token_cache: Arc<TokenCacheManager>,
53 pub login_throttle: Arc<LoginThrottle>,
55 pub toolchain_storage: Option<Arc<ToolchainStorage>>,
56 pub download_counter: Arc<DownloadCounter>,
57 pub proxy_client: Client,
58 pub cratesio_sync: CratesioSync,
59 pub download_filters: Arc<DownloadFilters>,
60 pub background_tasks: BackgroundTasks,
63}
64
65#[must_use]
69pub fn default_settings_prov() -> Arc<SettingsProv> {
70 Arc::new(
71 provcfg::Config::new()
72 .build::<SettingsProv>()
73 .expect("default SettingsProv build is infallible"),
74 )
75}