telegraph_api_rs/requests/
get_account_info.rs

1use 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/// Builder of `getAccountInfo`
13#[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    /// Required. Access token of the Telegraph account.
38    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    /// List of account fields to return. 
48    /// Available fields [`AccountField`].
49    pub fn fields(mut self, fields: Vec<AccountField>) -> Self {
50        self.fields = fields.into();
51        self
52    }
53}
54
55impl GetAccountInfo<AccessToken> {
56    /// Sending request to API
57    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}