storekit-rs 0.2.0

Safe Rust bindings for Apple's StoreKit framework — in-app purchases and transaction streams on macOS
Documentation
#![allow(missing_docs)]

use core::ffi::{c_char, c_void};

extern "C" {
    pub fn sk_string_free(s: *mut c_char);

    pub fn sk_products_json(
        identifiers_json: *const c_char,
        out_products_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_product_purchase(
        product_id: *const c_char,
        options_json: *const c_char,
        out_transaction: *mut *mut c_void,
        out_result_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_transaction_stream_create(
        config_json: *const c_char,
        out_error_message: *mut *mut c_char,
    ) -> *mut c_void;
    pub fn sk_transaction_stream_release(stream: *mut c_void);
    pub fn sk_transaction_stream_next(
        stream: *mut c_void,
        timeout_ms: u32,
        out_transaction: *mut *mut c_void,
        out_verification_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_transaction_retain(transaction: *mut c_void) -> *mut c_void;
    pub fn sk_transaction_release(transaction: *mut c_void);
    pub fn sk_transaction_verify(
        transaction: *mut c_void,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_transaction_finish(
        transaction: *mut c_void,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_transaction_latest_for(
        product_id: *const c_char,
        out_transaction: *mut *mut c_void,
        out_result_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_transaction_current_entitlement_for(
        product_id: *const c_char,
        out_transaction: *mut *mut c_void,
        out_result_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_app_store_can_make_payments(
        out_value: *mut i32,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_app_store_device_verification_id(
        out_uuid: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_app_store_sync(out_error_message: *mut *mut c_char) -> i32;
    pub fn sk_app_store_show_manage_subscriptions(out_error_message: *mut *mut c_char) -> i32;
    pub fn sk_app_store_request_review(out_error_message: *mut *mut c_char) -> i32;
    pub fn sk_app_store_present_offer_code_redeem_sheet(out_error_message: *mut *mut c_char)
        -> i32;

    pub fn sk_storefront_current_json(
        out_storefront_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_storefront_stream_create(out_error_message: *mut *mut c_char) -> *mut c_void;
    pub fn sk_storefront_stream_release(stream: *mut c_void);
    pub fn sk_storefront_stream_next(
        stream: *mut c_void,
        timeout_ms: u32,
        out_storefront_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_subscription_info_is_eligible_for_intro_offer(
        group_id: *const c_char,
        out_value: *mut i32,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_subscription_info_statuses_json(
        group_id: *const c_char,
        out_statuses_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_subscription_info_status_for_transaction(
        transaction_id: *const c_char,
        out_status_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_app_transaction_shared(
        out_result_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;
    pub fn sk_app_transaction_refresh(
        out_result_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_refund_begin_request_for_transaction_id(
        transaction_id: *const c_char,
        out_status: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_receipt_json(
        out_receipt_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;

    pub fn sk_store_context_json(
        out_context_json: *mut *mut c_char,
        out_error_message: *mut *mut c_char,
    ) -> i32;
}

pub mod status {
    pub const OK: i32 = 0;
    pub const END_OF_STREAM: i32 = 1;
    pub const INVALID_ARGUMENT: i32 = -1;
    pub const TIMED_OUT: i32 = -2;
    pub const NOT_SUPPORTED: i32 = -3;
    pub const FRAMEWORK_ERROR: i32 = -4;
    pub const VERIFICATION_ERROR: i32 = -5;
    pub const UNKNOWN: i32 = -99;
}