iyzipay-rust 0.1.2

iyzipay rust client
Documentation
use log::debug;

use crate::client::HttpClient;
use crate::model::payment::PaymentResource;
use crate::options::Options;
use crate::requests::CreateCheckoutFormInitializeRequest;
use crate::requests::PKISerialize;
use crate::requests::RetrieveCheckoutFormRequest;
use crate::resource::IyzipayResource;
use crate::types::Result;

#[derive(Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct CheckoutFormInitialize {
    #[serde(flatten)]
    resource: CheckoutFormInitializeResource,
}

impl CheckoutFormInitialize {
    pub fn create(
        req: &CreateCheckoutFormInitializeRequest,
        options: &Options,
    ) -> Result<CheckoutFormInitialize> {
        let request = serde_json::to_string(req)?;
        debug!("RequestBody:{}", request);
        let res = HttpClient::create().post(
            format!(
                "{}{}",
                options.base_url(),
                "/payment/iyzipos/checkoutform/initialize/auth/ecom"
            )
            .as_str(),
            request,
            IyzipayResource::get_http_headers(req.serialize().unwrap_or_default(), &options),
        )?;
        let response = res.json()?;
        Ok(response)
    }
}

impl std::ops::Deref for CheckoutFormInitialize {
    type Target = CheckoutFormInitializeResource;
    fn deref(&self) -> &Self::Target {
        &self.resource
    }
}

#[derive(Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct CheckoutFormInitializeResource {
    #[serde(flatten)]
    resource: IyzipayResource,

    token: Option<String>,

    checkout_form_content: Option<String>,

    token_expire_time: Option<i64>,

    payment_page_url: Option<String>,
}

impl CheckoutFormInitializeResource {
    pub fn set_token<T: Into<String>>(&mut self, token: T) {
        self.token = Some(token.into());
    }

    pub fn set_checkout_form_content<T: Into<String>>(&mut self, checkout_form_content: T) {
        self.checkout_form_content = Some(checkout_form_content.into());
    }

    pub fn set_token_expire_time<T: Into<i64>>(&mut self, token_expire_time: T) {
        self.token_expire_time = Some(token_expire_time.into());
    }

    pub fn set_payment_page_url<T: Into<String>>(&mut self, payment_page_url: T) {
        self.payment_page_url = Some(payment_page_url.into());
    }

    pub fn token(&self) -> Option<&String> {
        self.token.as_ref()
    }
    pub fn checkout_form_content(&self) -> Option<&String> {
        self.checkout_form_content.as_ref()
    }
    pub fn token_expire_time(&self) -> Option<&i64> {
        self.token_expire_time.as_ref()
    }
    pub fn payment_page_url(&self) -> Option<&String> {
        self.payment_page_url.as_ref()
    }
}

impl std::ops::Deref for CheckoutFormInitializeResource {
    type Target = IyzipayResource;
    fn deref(&self) -> &Self::Target {
        &self.resource
    }
}

#[derive(Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct CheckoutForm {
    #[serde(flatten)]
    resource: PaymentResource,

    token: Option<String>,

    callback_url: Option<String>,
}

impl CheckoutForm {
    pub fn retrieve(req: &RetrieveCheckoutFormRequest, options: &Options) -> Result<CheckoutForm> {
        let request = serde_json::to_string(req)?;
        debug!("RequestBody:{}", request);
        let res = HttpClient::create().post(
            format!(
                "{}{}",
                options.base_url(),
                "/payment/iyzipos/checkoutform/auth/ecom/detail"
            )
            .as_str(),
            request,
            IyzipayResource::get_http_headers(req.serialize().unwrap_or_default(), &options),
        )?;
        let response = res.json()?;
        Ok(response)
    }

    pub fn set_token<T: Into<String>>(&mut self, token: T) {
        self.token = Some(token.into());
    }

    pub fn set_callback_url<T: Into<String>>(&mut self, callback_url: T) {
        self.callback_url = Some(callback_url.into());
    }

    pub fn token(&self) -> Option<&String> {
        self.token.as_ref()
    }
    pub fn callback_url(&self) -> Option<&String> {
        self.callback_url.as_ref()
    }
}

impl std::ops::Deref for CheckoutForm {
    type Target = PaymentResource;
    fn deref(&self) -> &Self::Target {
        &self.resource
    }
}