8 releases (breaking)
0.8.0 | May 11, 2021 |
---|---|
0.7.1 | Jan 23, 2021 |
0.6.0 | Nov 22, 2020 |
0.5.0 | Oct 18, 2020 |
0.1.0 | Apr 18, 2020 |
#24 in #hub
67KB
1.5K
SLoC
Azure IoT SDK for Rust
Self developed library to interact with Azure IoT Hub using MQTT protocol
Running examples
Copy the sample config file
cp examples/config.sample.toml examples/config.toml
Edit values in examples/config.toml with your iot hub host, device and primary key
Usage
#[macro_use]
extern crate log;
use azure_iot_sdk::{client::IoTHubClient, message::Message};
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct DeviceConfig {
hostname: String,
device_id: String,
shared_access_key: String,
}
impl DeviceConfig {
fn from_env() -> Result<Self, config::ConfigError> {
let mut cfg = config::Config::default();
cfg.merge(config::File::with_name("examples/config"))?;
cfg.try_into()
}
}
#[tokio::main]
async fn main() {
env_logger::from_env(env_logger::Env::default().default_filter_or("info")).init();
let DeviceConfig {
hostname,
device_id,
shared_access_key,
} = DeviceConfig::from_env().unwrap();
let token_source = DeviceKeyTokenSource::new(
&hostname,
&device_id,
&shared_access_key,
)
.unwrap();
let mut client = IoTHubClient::new(&hostname, device_id, token_source).await?;
info!("Initialized client");
let mut recv = client.get_receiver().await;
let receive_loop = async {
while let Some(msg) = recv.recv().await {
match msg {
MessageType::C2DMessage(msg) => info!("Received message {:?}", msg),
_ => {}
}
}
};
let msg = Message::new(b"Hello, world!".to_vec());
let sender = client.send_message(msg);
tokio::join!(receive_loop, sender);
}
Dependencies
~7–20MB
~277K SLoC