indy-credx 1.1.1

Verifiable credential issuance and presentation for Hyperledger Indy (https://www.hyperledger.org/projects), which provides a distributed-ledger-based foundation for self-sovereign identity (https://sovrin.org).
Documentation
use ffi_support::FfiStr;
use indy_data_types::Qualifiable;

use super::error::{catch_error, ErrorCode};
use super::object::ObjectHandle;
use crate::services::{
    issuer::create_credential_offer,
    types::{CredentialOffer, SchemaId},
};

#[no_mangle]
pub extern "C" fn credx_create_credential_offer(
    schema_id: FfiStr,
    cred_def: ObjectHandle,
    key_proof: ObjectHandle,
    cred_offer_p: *mut ObjectHandle,
) -> ErrorCode {
    catch_error(|| {
        check_useful_c_ptr!(cred_offer_p);
        let schema_id = {
            let sid = schema_id
                .as_opt_str()
                .ok_or_else(|| err_msg!("Missing schema ID"))?;
            SchemaId::from_str(sid)?
        };
        let cred_offer = create_credential_offer(
            &schema_id,
            cred_def.load()?.cast_ref()?,
            key_proof.load()?.cast_ref()?,
        )?;
        let cred_offer = ObjectHandle::create(cred_offer)?;
        unsafe { *cred_offer_p = cred_offer };
        Ok(())
    })
}

impl_indy_object!(CredentialOffer, "CredentialOffer");
impl_indy_object_from_json!(CredentialOffer, credx_credential_offer_from_json);