some_random_api/
client.rs

1use crate::{
2    AnimalEndpoint, AnimuEndpoint, CanvasEndpoint, CanvasFilterEndpoint, CanvasMiscEndpoint,
3    CanvasOverlayEndpoint, ChatBotEndpoint, FactEndpoint, ImageEndpoint, OthersEndpoint,
4    PokemonEndpoint, PremiumEndpoint, Requester, WelcomeEndpoint,
5};
6
7/// A struct with functions used for interacting with Some Random API
8pub struct Client {
9    pub animal: AnimalEndpoint,
10    pub animu: AnimuEndpoint,
11    pub canvas: CanvasEndpoint,
12    pub chatbot: ChatBotEndpoint,
13    pub fact: FactEndpoint,
14    pub image: ImageEndpoint,
15    pub others: OthersEndpoint,
16    pub pokemon: PokemonEndpoint,
17    pub premium: PremiumEndpoint,
18    pub welcome: WelcomeEndpoint,
19}
20
21impl Client {
22    /// Constructs a new [`Client`]
23    ///
24    /// # Examples
25    ///
26    /// ```
27    /// use some_random_api::Client;
28    ///
29    /// // A client without an API key
30    /// Client::new(None::<String>);
31    ///
32    /// // A client with an API key
33    /// Client::new(Some("xxxxxxxxxx"));
34    /// ```
35    pub fn new<T: ToString>(api_key: Option<T>) -> Self {
36        let requester = Requester::new(api_key);
37
38        Self {
39            animal: AnimalEndpoint(requester.clone()),
40            animu: AnimuEndpoint(requester.clone()),
41            canvas: CanvasEndpoint {
42                filter: CanvasFilterEndpoint(requester.clone()),
43                misc: CanvasMiscEndpoint(requester.clone()),
44                overlay: CanvasOverlayEndpoint(requester.clone()),
45            },
46            chatbot: ChatBotEndpoint(requester.clone()),
47            fact: FactEndpoint(requester.clone()),
48            image: ImageEndpoint(requester.clone()),
49            others: OthersEndpoint(requester.clone()),
50            pokemon: PokemonEndpoint(requester.clone()),
51            premium: PremiumEndpoint(requester.clone()),
52            welcome: WelcomeEndpoint(requester),
53        }
54    }
55}