Skip to content

Commit b79fd3c

Browse files
committed
Fix #1478
1 parent 54ec4ba commit b79fd3c

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

zbus/src/connection/builder.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,15 @@ impl<'a> Builder<'a> {
525525
Target::VsockStream(stream) => stream.into(),
526526
Target::Address(address) => {
527527
guid = address.guid().map(|g| g.to_owned().into());
528-
match address.connect().await? {
528+
529+
match address
530+
.clone()
531+
.connect()
532+
.await
533+
.map_err(|error| match error {
534+
Error::InputOutput(error) => Error::InputOutputAddress(error, address),
535+
_ => error,
536+
})? {
529537
#[cfg(any(unix, not(feature = "tokio")))]
530538
address::transport::Stream::Unix(stream) => stream.into(),
531539
#[cfg(unix)]

zbus/src/error.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use zvariant::{Error as VariantError, ObjectPath};
55
use crate::{
66
fdo,
77
message::{Message, Type},
8+
Address,
89
};
910

1011
/// The error type for `zbus`.
@@ -20,6 +21,8 @@ pub enum Error {
2021
Address(String),
2122
/// An I/O error.
2223
InputOutput(Arc<io::Error>),
24+
/// An I/O error with its Target.
25+
InputOutputAddress(Arc<io::Error>, Address),
2326
/// Invalid message field.
2427
InvalidField,
2528
/// Data too large.
@@ -96,6 +99,7 @@ impl error::Error for Error {
9699
Error::InterfaceNotFound => None,
97100
Error::Address(_) => None,
98101
Error::InputOutput(e) => Some(e),
102+
Error::InputOutputAddress(e, _) => Some(e),
99103
Error::ExcessData => None,
100104
Error::Handshake(_) => None,
101105
Error::IncorrectEndian => None,
@@ -125,6 +129,7 @@ impl fmt::Display for Error {
125129
Error::Address(e) => write!(f, "address error: {e}"),
126130
Error::ExcessData => write!(f, "excess data"),
127131
Error::InputOutput(e) => write!(f, "I/O error: {e}"),
132+
Error::InputOutputAddress(e, address) => write!(f, "I/O error: {e} for {address}"),
128133
Error::Handshake(e) => write!(f, "D-Bus handshake failed: {e}"),
129134
Error::IncorrectEndian => write!(f, "incorrect endian"),
130135
Error::InvalidField => write!(f, "invalid message field"),
@@ -160,6 +165,9 @@ impl Clone for Error {
160165
Error::Address(e) => Error::Address(e.clone()),
161166
Error::ExcessData => Error::ExcessData,
162167
Error::InputOutput(e) => Error::InputOutput(e.clone()),
168+
Error::InputOutputAddress(e, address) => {
169+
Error::InputOutputAddress(e.clone(), address.clone())
170+
}
163171
Error::Handshake(e) => Error::Handshake(e.clone()),
164172
Error::IncorrectEndian => Error::IncorrectEndian,
165173
Error::InvalidField => Error::InvalidField,

0 commit comments

Comments
 (0)