apple 0.2.0

A Rust library for Apple Sign-In authentication, CloudKit Web Services, and App Store Server API
Documentation
use crate::cloudkit::client::CloudKitClient;
use crate::error::AppleError;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize)]
struct CreateTokenRequest {
    #[serde(rename = "apnsEnvironment", skip_serializing_if = "Option::is_none")]
    apns_environment: Option<String>,
}

#[derive(Debug, Deserialize)]
pub struct TokenCreateResponse {
    #[serde(rename = "webcourierURL")]
    pub webcourier_url: Option<String>,
    #[serde(rename = "apnsToken")]
    pub apns_token: Option<String>,
}

#[derive(Debug, Serialize)]
struct RegisterTokenRequest {
    #[serde(rename = "apnsToken")]
    apns_token: String,
    #[serde(rename = "apnsEnvironment", skip_serializing_if = "Option::is_none")]
    apns_environment: Option<String>,
}

impl CloudKitClient {
    pub async fn create_token(
        &self,
        apns_environment: Option<&str>,
    ) -> Result<TokenCreateResponse, AppleError> {
        let url = self.build_base_url("tokens/create");
        let request = CreateTokenRequest {
            apns_environment: apns_environment.map(|s| s.to_string()),
        };

        self.signed_post(&url, &request).await
    }

    pub async fn register_token(
        &self,
        apns_token: &str,
        apns_environment: Option<&str>,
    ) -> Result<(), AppleError> {
        let url = self.build_base_url("tokens/register");
        let request = RegisterTokenRequest {
            apns_token: apns_token.to_string(),
            apns_environment: apns_environment.map(|s| s.to_string()),
        };

        #[derive(Deserialize)]
        struct EmptyResponse {}

        let _: EmptyResponse = self.signed_post(&url, &request).await?;
        Ok(())
    }
}