diff --git a/src/main.rs b/src/main.rs index af6abae..90aa074 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,25 @@ use tokio::time::sleep; mod straba; +async fn publish_departure_data(client: &AsyncClient, data: &straba::NextDeparture) -> Result<(), Box> { + client + .publish("departure/station", QoS::AtLeastOnce, false, data.station_name.as_bytes()) + .await?; + client + .publish("departure/outbound/station", QoS::AtLeastOnce, false, data.outbound_station.as_bytes()) + .await?; + client + .publish("departure/outbound/diff", QoS::AtLeastOnce, false, format!("{}", data.outbound_diff).as_bytes()) + .await?; + client + .publish("departure/inbound/station", QoS::AtLeastOnce, false, data.inbound_station.as_bytes()) + .await?; + client + .publish("departure/inbound/diff", QoS::AtLeastOnce, false, format!("{}", data.inbound_diff).as_bytes()) + .await?; + Ok(()) +} + #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { @@ -74,44 +93,14 @@ async fn main() -> Result<(), Box> { println!("Connected to MQTT broker"); if data_published == false { - client - .publish("departure/station", QoS::AtLeastOnce, false, departure_data.station_name.as_bytes()) - .await?; - client - .publish("departure/outbound/station", QoS::AtLeastOnce, false, departure_data.outbound_station.as_bytes()) - .await?; - - client - .publish("departure/outbound/diff", QoS::AtLeastOnce, false, format!("{}", departure_data.outbound_diff)) - .await?; - client - .publish("departure/inbound/station", QoS::AtLeastOnce, false, departure_data.inbound_station.as_bytes()) - .await?; - client - .publish("departure/inbound/diff", QoS::AtLeastOnce, false, format!("{}", departure_data.inbound_diff)) - .await?; + publish_departure_data(&client, &departure_data).await?; data_published = true; } } Ok(_) => { if data_published == false { - client - .publish("departure/station", QoS::AtLeastOnce, false, departure_data.station_name.as_bytes()) - .await?; - client - .publish("departure/outbound/station", QoS::AtLeastOnce, false, departure_data.outbound_station.as_bytes()) - .await?; - - client - .publish("departure/outbound/diff", QoS::AtLeastOnce, false, format!("{}", departure_data.outbound_diff)) - .await?; - client - .publish("departure/inbound/station", QoS::AtLeastOnce, false, departure_data.inbound_station.as_bytes()) - .await?; - client - .publish("departure/inbound/diff", QoS::AtLeastOnce, false, format!("{}", departure_data.inbound_diff)) - .await?; + publish_departure_data(&client, &departure_data).await?; data_published = true; } }