systemprompt_runtime/
context_traits.rs1use std::sync::Arc;
7
8use systemprompt_analytics::{AnalyticsService, FingerprintRepository};
9use systemprompt_extension::{
10 Extension, ExtensionContext, HasAnalytics, HasFingerprint, HasRouteClassifier, HasUserService,
11};
12use systemprompt_models::RouteClassifier;
13use systemprompt_traits::{
14 AnalyticsProvider, AppContext as AppContextTrait, ConfigProvider, DatabaseHandle,
15 FingerprintProvider, UserProvider,
16};
17use systemprompt_users::UserService;
18
19use crate::AppContext;
20
21impl AppContextTrait for AppContext {
22 fn config(&self) -> Arc<dyn ConfigProvider> {
23 let concrete = Arc::clone(&self.config);
24 let provider: Arc<dyn ConfigProvider> = concrete;
25 provider
26 }
27
28 fn database_handle(&self) -> Arc<dyn DatabaseHandle> {
29 let concrete = Arc::clone(&self.database);
30 let handle: Arc<dyn DatabaseHandle> = concrete;
31 handle
32 }
33
34 fn analytics_provider(&self) -> Option<Arc<dyn AnalyticsProvider>> {
35 let concrete = Arc::clone(&self.analytics_service);
36 let provider: Arc<dyn AnalyticsProvider> = concrete;
37 Some(provider)
38 }
39
40 fn fingerprint_provider(&self) -> Option<Arc<dyn FingerprintProvider>> {
41 let concrete = Arc::clone(self.fingerprint_repo.as_ref()?);
42 let provider: Arc<dyn FingerprintProvider> = concrete;
43 Some(provider)
44 }
45
46 fn user_provider(&self) -> Option<Arc<dyn UserProvider>> {
47 let concrete = Arc::clone(self.user_service.as_ref()?);
48 let provider: Arc<dyn UserProvider> = concrete;
49 Some(provider)
50 }
51}
52
53impl ExtensionContext for AppContext {
54 fn config(&self) -> Arc<dyn ConfigProvider> {
55 let concrete = Arc::clone(&self.config);
56 let provider: Arc<dyn ConfigProvider> = concrete;
57 provider
58 }
59
60 fn database(&self) -> Arc<dyn DatabaseHandle> {
61 let concrete = Arc::clone(&self.database);
62 let handle: Arc<dyn DatabaseHandle> = concrete;
63 handle
64 }
65
66 fn get_extension(&self, id: &str) -> Option<Arc<dyn Extension>> {
67 self.extension_registry.get(id).cloned()
68 }
69}
70
71impl HasAnalytics for AppContext {
72 type Analytics = Arc<AnalyticsService>;
73
74 fn analytics(&self) -> &Self::Analytics {
75 &self.analytics_service
76 }
77}
78
79impl HasFingerprint for AppContext {
80 type Fingerprint = Arc<FingerprintRepository>;
81
82 fn fingerprint(&self) -> Option<&Self::Fingerprint> {
83 self.fingerprint_repo.as_ref()
84 }
85}
86
87impl HasUserService for AppContext {
88 type UserService = Arc<UserService>;
89
90 fn user_service(&self) -> Option<&Self::UserService> {
91 self.user_service.as_ref()
92 }
93}
94
95impl HasRouteClassifier for AppContext {
96 type RouteClassifier = Arc<RouteClassifier>;
97
98 fn route_classifier(&self) -> &Self::RouteClassifier {
99 &self.route_classifier
100 }
101}