cloudkit 0.1.0

Safe Rust bindings for Apple's CloudKit framework — iCloud databases and sync on macOS
Documentation
#![allow(missing_docs, non_camel_case_types)]

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

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

    pub fn ck_record_create(
        record_type: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;

    pub fn ck_container_account_status_sync(
        container_identifier: *const c_char,
        out_status: *mut i32,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_container_account_status_async(
        container_identifier: *const c_char,
        callback: AccountStatusCallback,
        refcon: *mut c_void,
    );

    pub fn ck_container_fetch_user_record_id_sync(
        container_identifier: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_container_fetch_user_record_id_async(
        container_identifier: *const c_char,
        callback: JsonCallback,
        refcon: *mut c_void,
    );

    pub fn ck_database_save_record_sync(
        container_identifier: *const c_char,
        database_scope: i32,
        record_json: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_database_fetch_record_sync(
        container_identifier: *const c_char,
        database_scope: i32,
        record_id_json: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_database_delete_record_sync(
        container_identifier: *const c_char,
        database_scope: i32,
        record_id_json: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_database_perform_query_sync(
        container_identifier: *const c_char,
        database_scope: i32,
        query_json: *const c_char,
        zone_id_json: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_database_perform_query_async(
        container_identifier: *const c_char,
        database_scope: i32,
        query_json: *const c_char,
        zone_id_json: *const c_char,
        callback: JsonCallback,
        refcon: *mut c_void,
    );

    pub fn ck_database_execute_modify_records_sync(
        container_identifier: *const c_char,
        database_scope: i32,
        operation_json: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
    pub fn ck_database_execute_query_operation_sync(
        container_identifier: *const c_char,
        database_scope: i32,
        operation_json: *const c_char,
        out_json: *mut *mut c_char,
        out_error_json: *mut *mut c_char,
    ) -> i32;
}

pub type JsonCallback =
    unsafe extern "C" fn(refcon: *mut c_void, json: *const c_char, error_json: *const c_char);
pub type AccountStatusCallback =
    unsafe extern "C" fn(refcon: *mut c_void, status_raw: i32, error_json: *const c_char);

pub mod status {
    pub const OK: i32 = 0;
    pub const INVALID_ARGUMENT: i32 = -1;
    pub const FAILURE: i32 = -2;
    pub const TIMED_OUT: i32 = -3;
}