oauth2_twitter/extensions/
builder.rs1use oauth2_client::{
2 extensions::{
3 AccessTokenResponseSuccessfulBody, Builder, BuilderObtainUserInfoError,
4 BuilderObtainUserInfoOutput, GrantInfo,
5 },
6 re_exports::{serde_json, Scope},
7};
8
9use super::TwitterUserInfoEndpoint;
10use crate::TwitterScope;
11
12#[derive(Debug, Clone)]
14pub struct TwitterExtensionsBuilder;
15
16impl<SCOPE> Builder<SCOPE> for TwitterExtensionsBuilder
17where
18 SCOPE: Scope,
19{
20 fn obtain_user_info(
21 &self,
22 _grant_info: GrantInfo<SCOPE>,
23 access_token: &AccessTokenResponseSuccessfulBody<SCOPE>,
24 ) -> Result<BuilderObtainUserInfoOutput, BuilderObtainUserInfoError> {
25 if let Some(scope) = &access_token.scope {
26 if serde_json::to_string(&scope)
27 .unwrap_or_default()
28 .contains(TwitterScope::UsersRead.to_string().as_str())
29 && serde_json::to_string(&scope)
30 .unwrap_or_default()
31 .contains(TwitterScope::TweetRead.to_string().as_str())
32 {
33 return Ok(BuilderObtainUserInfoOutput::Respond(Box::new(
34 TwitterUserInfoEndpoint::new(&access_token.access_token),
35 )));
36 }
37 }
38
39 Ok(BuilderObtainUserInfoOutput::None)
40 }
41}