11use std:: marker:: PhantomData ;
22
3- use async_trait:: async_trait;
4- use dioxus_server:: extract;
5-
6- use shield:: { Session , ShieldDyn , User } ;
3+ use anyhow:: { Result , anyhow} ;
4+ use dioxus_server:: http:: Extensions ;
5+ use shield:: { Session , Shield , ShieldDyn , User } ;
76use shield_axum:: { ExtractSession , ExtractShield } ;
87use shield_dioxus:: { DioxusIntegration , DioxusIntegrationDyn } ;
98
@@ -21,19 +20,24 @@ impl<U: User> Default for AxumDioxusIntegration<U> {
2120 }
2221}
2322
24- #[ async_trait]
2523impl < U : User + Clone + ' static > DioxusIntegration for AxumDioxusIntegration < U > {
26- async fn extract_shield ( & self ) -> ShieldDyn {
27- let ExtractShield ( shield) = extract :: < ExtractShield < U > , _ > ( )
28- . await
29- . expect ( "Shield should be extracted" ) ;
30-
31- ShieldDyn :: new ( shield)
24+ fn extract_shield ( & self , extensions : & Extensions ) -> Result < ShieldDyn > {
25+ let ExtractShield ( shield) = extensions
26+ . get :: < Shield < U > > ( )
27+ . cloned ( )
28+ . map ( ExtractShield )
29+ . ok_or_else ( || anyhow ! ( "Shield should be extracted" ) ) ?;
30+
31+ Ok ( ShieldDyn :: new ( shield) )
3232 }
3333
34- async fn extract_session ( & self ) -> Session {
35- let ExtractSession ( session) = extract ( ) . await . expect ( "Session should be extracted" ) ;
34+ fn extract_session ( & self , extensions : & Extensions ) -> Result < Session > {
35+ let ExtractSession ( session) = extensions
36+ . get :: < Session > ( )
37+ . cloned ( )
38+ . map ( ExtractSession )
39+ . ok_or_else ( || anyhow ! ( "Session should be extracted" ) ) ?;
3640
37- session
41+ Ok ( session)
3842 }
3943}
0 commit comments