azure-iot-rs 0.7.2

Rust wrappers for Azure IOT C SDK
Documentation
use azure_iot_rs_sys::*;

use crate::error::IotError;

pub struct UploadContextHandle(IOTHUB_CLIENT_LL_UPLOADTOBLOB_CONTEXT_HANDLE);

impl UploadContextHandle {
    pub fn from_raw(raw: IOTHUB_CLIENT_LL_UPLOADTOBLOB_CONTEXT_HANDLE) -> Option<Self> {
        if raw.is_null() { None } else { Some(Self(raw)) }
    }

    pub fn put_block(&self, block_number: u32, data: &[u8]) -> Result<(), IotError> {
        let result = unsafe {
            IoTHubClientCore_AzureStoragePutBlock(self.0, block_number, data.as_ptr(), data.len())
        };
        IotError::check_sdk_result(result)?;
        Ok(())
    }

    pub fn put_block_list(&self) -> Result<(), IotError> {
        let result = unsafe { IoTHubClientCore_AzureStoragePutBlockList(self.0) };
        IotError::check_sdk_result(result)?;
        Ok(())
    }
}

impl Drop for UploadContextHandle {
    fn drop(&mut self) {
        unsafe { IoTHubClientCore_AzureStorageDestroyClient(self.0) }
    }
}