jkn_rust 0.1.1

Client Rust untuk bridging API BPJS/JKN
Documentation
use std::sync::Arc;

use serde::Serialize;

use crate::JknClient;
use crate::client::{JknResponse, RequestOptions, normalize_path};
use crate::config::ServiceType;
use crate::error::Result;
use crate::models::antrean::{AntreanFktpRefDokterResponse, AntreanFktpRefPoliResponse};

#[derive(Clone)]
pub struct AntreanFktp {
    client: Arc<JknClient>,
}

impl AntreanFktp {
    pub fn new(client: Arc<JknClient>) -> Self {
        Self { client }
    }

    pub async fn ref_poli(&self, tanggal: &str) -> Result<JknResponse> {
        self.client
            .send(
                ServiceType::Pcare,
                RequestOptions::get(format!("/ref/poli/tanggal/{tanggal}")),
            )
            .await
    }

    pub async fn ref_poli_typed(&self, tanggal: &str) -> Result<AntreanFktpRefPoliResponse> {
        self.ref_poli(tanggal).await?.into_response()
    }

    pub async fn ref_dokter(&self, tanggal: &str, kode_poli: &str) -> Result<JknResponse> {
        let path = normalize_path(
            "/ref/dokter/kodepoli/:kodePoli/tanggal/:tanggal",
            &[
                ("kodePoli", Some(kode_poli.to_string())),
                ("tanggal", Some(tanggal.to_string())),
            ],
        )?;
        self.client
            .send(ServiceType::Pcare, RequestOptions::get(path))
            .await
    }

    pub async fn tambah<T: Serialize>(&self, data: T) -> Result<JknResponse> {
        self.client
            .send(
                ServiceType::Pcare,
                RequestOptions::post("/antrean/add").data(data)?,
            )
            .await
    }

    pub async fn update_status<T: Serialize>(&self, data: T) -> Result<JknResponse> {
        self.client
            .send(
                ServiceType::Pcare,
                RequestOptions::post("/antrean/panggil").data(data)?,
            )
            .await
    }

    pub async fn batal<T: Serialize>(&self, data: T) -> Result<JknResponse> {
        self.client
            .send(
                ServiceType::Pcare,
                RequestOptions::post("/antrean/batal").data(data)?,
            )
            .await
    }

    pub async fn ref_dokter_typed(
        &self,
        tanggal: &str,
        kode_poli: &str,
    ) -> Result<AntreanFktpRefDokterResponse> {
        self.ref_dokter(tanggal, kode_poli).await?.into_response()
    }
}