|
| 1 | +use anyhow::Context as _; |
| 2 | +use helper::bindings::{ |
| 3 | + fermyon::spin2_0_0::mqtt::{self, Qos}, |
| 4 | + wasi::http0_2_0::types::{IncomingRequest, OutgoingResponse, ResponseOutparam}, |
| 5 | +}; |
| 6 | + |
| 7 | +struct Component; |
| 8 | +helper::gen_http_trigger_bindings!(Component); |
| 9 | + |
| 10 | +impl bindings::Guest for Component { |
| 11 | + fn handle(request: IncomingRequest, response_out: ResponseOutparam) { |
| 12 | + helper::handle_result(handle(request), response_out) |
| 13 | + } |
| 14 | +} |
| 15 | + |
| 16 | +const MQTT_ADDRESS: &str = "MQTT_ADDRESS"; |
| 17 | +const MQTT_USERNAME: &str = "MQTT_USERNAME"; |
| 18 | +const MQTT_PASSWORD: &str = "MQTT_PASSWORD"; |
| 19 | + |
| 20 | +fn handle(request: IncomingRequest) -> anyhow::Result<OutgoingResponse> { |
| 21 | + let address = get_header(&request, &MQTT_ADDRESS.to_owned())?; |
| 22 | + let username = get_header(&request, &MQTT_USERNAME.to_owned())?; |
| 23 | + let password = get_header(&request, &MQTT_PASSWORD.to_owned())?; |
| 24 | + |
| 25 | + let connection = mqtt::Connection::open(&address, &username, &password, 30)?; |
| 26 | + |
| 27 | + connection.publish("telemetry-topic", &b"Eureka!".to_vec(), Qos::AtLeastOnce)?; |
| 28 | + |
| 29 | + Ok(helper::ok_response()) |
| 30 | +} |
| 31 | + |
| 32 | +fn get_header(request: &IncomingRequest, header_key: &String) -> anyhow::Result<String> { |
| 33 | + helper::get_header(request, header_key).with_context(|| format!("no {} header", header_key)) |
| 34 | +} |
0 commit comments