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 |
#21 in #hub
42 downloads per month
69KB
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
~283K SLoC