1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::Client;
use concat_string::concat_string;
use lta_models::prelude::{BusArrivalResp, BusArrivalRespRaw as RawBusArrivalResp};

use crate::reqwest_async::ReqwestAsync;
use crate::{r#async::ClientExt, Bus, BusRequests, LTAClient, LTAResult};

impl BusRequests<LTAClient<ReqwestAsync>> for Bus {
    async fn get_arrival<'a, S>(
        client: &LTAClient<ReqwestAsync>,
        bus_stop_code: u32,
        service_no: S,
    ) -> LTAResult<BusArrivalResp>
    where
        S: Into<Option<&'a str>>,
    {
        let url = concat_string!(client.base_url(), "/BusArrivalv2");

        match service_no.into() {
            Some(srv_no) => {
                client
                    .build_req_with_query::<RawBusArrivalResp, _, _>(&url, |rb| {
                        rb.query(&[
                            ("BusStopCode", bus_stop_code.to_string().as_str()),
                            ("ServiceNo", srv_no),
                        ])
                    })
                    .await
            }
            None => {
                client
                    .build_req_with_query::<RawBusArrivalResp, _, _>(&url, |rb| {
                        rb.query(&[("BusStopCode", bus_stop_code.to_string())])
                    })
                    .await
            }
        }
    }
}