upstox-rust-sdk 1.0.0

SDK to access Upstox's Uplink APIs programmatically
Documentation
use {
    crate::{
        client::ApiClient,
        constants::{
            APIVersion, BaseUrlType, MARKET_INFO_EXCHANGE_STATUS_ENDPOINT,
            MARKET_INFO_HOLIDAYS_ENDPOINT, MARKET_INFO_TIMINGS_ENDPOINT,
        },
        models::{
            error_response::ErrorResponse,
            market_information::{
                exchange_status_request::ExchangeStatusRequest,
                exchange_status_response::ExchangeStatusResponse,
                market_holidays_request::MarketHolidaysRequest,
                market_holidays_response::MarketHolidayResponse,
                market_timings_request::MarketTimingsRequest,
                market_timings_response::MarketTimingResponse,
            },
            success_response::SuccessResponse,
        },
        rate_limiter::RateLimitExceeded,
    },
    serde_valid::Validate,
};

impl ApiClient {
    pub async fn get_market_holidays(
        &self,
        market_holidays_path_params: MarketHolidaysRequest,
    ) -> Result<Result<SuccessResponse<Vec<MarketHolidayResponse>>, ErrorResponse>, RateLimitExceeded>
    {
        market_holidays_path_params.validate().unwrap();

        let res: reqwest::Response = self
            .get(
                format!(
                    "{}/{}",
                    MARKET_INFO_HOLIDAYS_ENDPOINT,
                    match market_holidays_path_params.date {
                        Some(date) => date,
                        None => "".to_string(),
                    }
                )
                .as_str(),
                false,
                None,
                BaseUrlType::REGULAR,
                APIVersion::V2,
            )
            .await?;

        Ok(match res.status().as_u16() {
            200 => Ok(res
                .json::<SuccessResponse<Vec<MarketHolidayResponse>>>()
                .await
                .unwrap()),
            _ => Err(res.json::<ErrorResponse>().await.unwrap()),
        })
    }

    pub async fn get_market_timings(
        &self,
        market_timings_path_params: MarketTimingsRequest,
    ) -> Result<Result<SuccessResponse<Vec<MarketTimingResponse>>, ErrorResponse>, RateLimitExceeded>
    {
        market_timings_path_params.validate().unwrap();

        let res: reqwest::Response = self
            .get(
                format!(
                    "{}/{}",
                    MARKET_INFO_TIMINGS_ENDPOINT, market_timings_path_params.date
                )
                .as_str(),
                false,
                None,
                BaseUrlType::REGULAR,
                APIVersion::V2,
            )
            .await?;

        Ok(match res.status().as_u16() {
            200 => Ok(res
                .json::<SuccessResponse<Vec<MarketTimingResponse>>>()
                .await
                .unwrap()),
            _ => Err(res.json::<ErrorResponse>().await.unwrap()),
        })
    }

    pub async fn get_exchange_status(
        &self,
        exchange_staus_path_params: ExchangeStatusRequest,
    ) -> Result<Result<SuccessResponse<ExchangeStatusResponse>, ErrorResponse>, RateLimitExceeded>
    {
        let res: reqwest::Response = self
            .get(
                format!(
                    "{}/{}",
                    MARKET_INFO_EXCHANGE_STATUS_ENDPOINT, exchange_staus_path_params.exchange
                )
                .as_str(),
                true,
                None,
                BaseUrlType::REGULAR,
                APIVersion::V2,
            )
            .await?;

        Ok(match res.status().as_u16() {
            200 => Ok(res
                .json::<SuccessResponse<ExchangeStatusResponse>>()
                .await
                .unwrap()),
            _ => Err(res.json::<ErrorResponse>().await.unwrap()),
        })
    }
}