telegraph_api_rs/requests/
get_account_info.rs1use std::rc::Rc;
2
3use reqwest::blocking::Client;
4use serde::Serialize;
5
6
7use crate::error::TelegraphError;
8use crate::types::{AccountField, TelegraphResult, Account};
9use crate::requests::{ApiFieldSerializer, NoAccessToken, AccessToken};
10
11
12#[derive(Serialize)]
14pub struct GetAccountInfo<T> {
15 #[serde(skip)]
16 client: Rc<Client>,
17 #[serde(skip)]
18 method_name: Rc<String>,
19
20 access_token: T,
21 #[serde(serialize_with = "ApiFieldSerializer::serialize")]
22 fields: Option<Vec<AccountField>>
23}
24
25impl GetAccountInfo<NoAccessToken> {
26 pub(crate) fn new(client: Rc<Client>, method_name: Rc<String>) -> GetAccountInfo<NoAccessToken> {
27 Self {
28 client,
29 method_name,
30 access_token: NoAccessToken,
31 fields: vec![AccountField::ShortName, AccountField::AuthorName, AccountField::AuthorUrl].into()
32 }
33 }
34}
35
36impl<T> GetAccountInfo<T> {
37 pub fn access_token(self, access_token: &str) -> GetAccountInfo<AccessToken> {
39 GetAccountInfo {
40 client: self.client,
41 method_name: self.method_name,
42 access_token: AccessToken(access_token.into()),
43 fields: self.fields
44 }
45 }
46
47 pub fn fields(mut self, fields: Vec<AccountField>) -> Self {
50 self.fields = fields.into();
51 self
52 }
53}
54
55impl GetAccountInfo<AccessToken> {
56 pub fn send(self) -> Result<Account, TelegraphError> {
58 let req = self.client.post(self.method_name.as_str()).form(&self).send()?;
59 let json: TelegraphResult<Account> = req.json()?;
60 if !json.ok {
61 Err(json.error.unwrap())
62 } else {
63 Ok(json.result.unwrap())
64 }
65 }
66}