cue_sdk/initialization/
mod.rs

1use cue_sdk_sys as ffi;
2use failure::Fail;
3
4use super::errors::{get_last_error, CueSdkError};
5
6mod protocol_details;
7
8pub use self::protocol_details::ProtocolDetails;
9pub use self::protocol_details::ProtocolDetailsFromFfiError;
10
11#[derive(Debug, Clone, Fail, PartialEq)]
12pub enum HandshakeError {
13    #[fail(display = "Initial handshake failed with error: {:?}", _0)]
14    InitialHandshakeError(CueSdkError),
15    #[fail(
16        display = "Unexpected error on receiving protocol details from the CueSDK: {:?}",
17        _0
18    )]
19    ProtocolDetailsError(ProtocolDetailsFromFfiError),
20}
21
22pub(super) fn perform_handshake() -> Result<ProtocolDetails, HandshakeError> {
23    let ffi_protocol_details = unsafe { ffi::CorsairPerformProtocolHandshake() };
24    match get_last_error() {
25        Some(e) => Err(HandshakeError::InitialHandshakeError(e)),
26        None => ProtocolDetails::from_ffi(ffi_protocol_details)
27            .map_err(|e| HandshakeError::ProtocolDetailsError(e)),
28    }
29}