diff options
author | Didier Wenzek <didier.wenzek@acidalie.com> | 2021-09-16 15:47:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-16 15:47:38 +0100 |
commit | b8950d2635060576ff1ba60f6d8867083a7dccfb (patch) | |
tree | 5c0f8e7c19a4d41757173ae3eea27ed259a1680e /tedge | |
parent | 85e0037c03f6fc813471bf92fd1c5039a7be93a1 (diff) |
Fix the exit status of `tedge mqtt pub` on error (#434)
* Revert to the previous behaviour: exit when the TCP connection is lost
* Cargo fmt
* Fix the error status returned by `tedge mqtt sub` on error
* Fix error message
* Cargo fmt
Co-authored-by: Wenzek <diw@softwareag.com>
Diffstat (limited to 'tedge')
-rw-r--r-- | tedge/src/cli/mqtt/error.rs | 3 | ||||
-rw-r--r-- | tedge/src/cli/mqtt/publish.rs | 10 | ||||
-rw-r--r-- | tedge/src/cli/mqtt/subscribe.rs | 7 |
3 files changed, 17 insertions, 3 deletions
diff --git a/tedge/src/cli/mqtt/error.rs b/tedge/src/cli/mqtt/error.rs index 320d9fee..fe209154 100644 --- a/tedge/src/cli/mqtt/error.rs +++ b/tedge/src/cli/mqtt/error.rs @@ -11,4 +11,7 @@ pub enum MqttError { #[error("The input QoS should be 0, 1, or 2")] InvalidQoSError, + + #[error("MQTT connection error: {0}\n\nHint: Is MQTT server running?")] + ServerError(String), } diff --git a/tedge/src/cli/mqtt/publish.rs b/tedge/src/cli/mqtt/publish.rs index 5e7503cc..c1a1dfa1 100644 --- a/tedge/src/cli/mqtt/publish.rs +++ b/tedge/src/cli/mqtt/publish.rs @@ -38,6 +38,7 @@ fn publish(cmd: &MqttPublishCommand) -> Result<(), MqttError> { let (mut client, mut connection) = rumqttc::Client::new(options, DEFAULT_QUEUE_CAPACITY); let mut published = false; let mut acknowledged = false; + let mut any_error = None; client.publish(&cmd.topic, cmd.qos, retain_flag, payload)?; @@ -63,10 +64,11 @@ fn publish(cmd: &MqttPublishCommand) -> Result<(), MqttError> { } } Ok(Event::Incoming(Incoming::Disconnect)) => { + any_error = Some(MqttError::ServerError("Disconnected".to_string())); break; } Err(err) => { - eprintln!("ERROR: {:?}", err); + any_error = Some(MqttError::ServerError(err.to_string())); break; } _ => {} @@ -80,5 +82,9 @@ fn publish(cmd: &MqttPublishCommand) -> Result<(), MqttError> { } client.disconnect()?; - Ok(()) + if let Some(err) = any_error { + Err(err) + } else { + Ok(()) + } } diff --git a/tedge/src/cli/mqtt/subscribe.rs b/tedge/src/cli/mqtt/subscribe.rs index bde16811..b7278c75 100644 --- a/tedge/src/cli/mqtt/subscribe.rs +++ b/tedge/src/cli/mqtt/subscribe.rs @@ -63,7 +63,12 @@ fn subscribe(cmd: &MqttSubscribeCommand) -> Result<(), MqttError> { client.subscribe(cmd.topic.as_str(), cmd.qos).unwrap(); } Err(err) => { - eprintln!("ERROR: {:?}", err); + let err_msg = err.to_string(); + if err_msg.contains("I/O: Connection refused (os error 111)") { + return Err(MqttError::ServerError(err_msg)); + } + + eprintln!("ERROR: {}", err_msg); std::thread::sleep(std::time::Duration::from_secs(1)); } _ => {} |