Teal.fm scrobbler for Plex
at main 1.7 kB view raw
1use std::{ops::Deref, sync::Arc}; 2 3use atproto_identity::{key::KeyProvider, resolve::IdentityResolver, storage::DidDocumentStorage}; 4use atproto_oauth::storage::OAuthRequestStorage; 5use atproto_oauth_axum::state::OAuthClientConfig; 6use axum::extract::FromRef; 7 8pub struct InnerWebContext { 9 pub http_client: reqwest::Client, 10 pub identity_resolver: Arc<dyn IdentityResolver>, 11 pub oauth_client_config: OAuthClientConfig, 12 pub oauth_storage: Arc<dyn OAuthRequestStorage + Send + Sync>, 13 pub document_storage: Arc<dyn DidDocumentStorage + Send + Sync>, 14 pub key_provider: Arc<dyn KeyProvider + Send + Sync>, 15} 16 17#[derive(Clone, FromRef)] 18pub struct WebContext(pub Arc<InnerWebContext>); 19 20impl Deref for WebContext { 21 type Target = InnerWebContext; 22 23 fn deref(&self) -> &Self::Target { 24 &self.0 25 } 26} 27 28impl FromRef<WebContext> for OAuthClientConfig { 29 fn from_ref(context: &WebContext) -> Self { 30 context.0.oauth_client_config.clone() 31 } 32} 33 34impl FromRef<WebContext> for reqwest::Client { 35 fn from_ref(context: &WebContext) -> Self { 36 context.0.http_client.clone() 37 } 38} 39 40impl FromRef<WebContext> for Arc<dyn OAuthRequestStorage> { 41 fn from_ref(context: &WebContext) -> Self { 42 context.0.oauth_storage.clone() 43 } 44} 45 46impl FromRef<WebContext> for Arc<dyn DidDocumentStorage> { 47 fn from_ref(context: &WebContext) -> Self { 48 context.0.document_storage.clone() 49 } 50} 51 52impl FromRef<WebContext> for Arc<dyn KeyProvider> { 53 fn from_ref(context: &WebContext) -> Self { 54 context.0.key_provider.clone() 55 } 56} 57 58impl FromRef<WebContext> for Arc<dyn IdentityResolver> { 59 fn from_ref(context: &WebContext) -> Self { 60 context.0.identity_resolver.clone() 61 } 62}