@@ -6,15 +6,15 @@ use std::str::FromStr;
66use crate :: dbus_type:: DbusType ;
77
88/// Get the arguments of a message as nushell Values
9- pub fn from_message ( message : & Message ) -> Result < Vec < Value > , String > {
9+ pub fn from_message ( message : & Message , span : Span ) -> Result < Vec < Value > , String > {
1010 let mut out = vec ! [ ] ;
1111 for refarg in message. iter_init ( ) {
12- out. push ( from_refarg ( & refarg) ?) ;
12+ out. push ( from_refarg ( & refarg, span ) ?) ;
1313 }
1414 Ok ( out)
1515}
1616
17- pub fn from_refarg ( refarg : & dyn RefArg ) -> Result < Value , String > {
17+ pub fn from_refarg ( refarg : & dyn RefArg , span : Span ) -> Result < Value , String > {
1818 Ok ( match refarg. arg_type ( ) {
1919 ArgType :: Array => {
2020 if refarg. signature ( ) . starts_with ( "a{" ) {
@@ -24,48 +24,48 @@ pub fn from_refarg(refarg: &dyn RefArg) -> Result<Value, String> {
2424 while let Some ( key) = iter. next ( ) {
2525 if let Some ( val) = iter. next ( ) {
2626 if let Some ( key_str) = key. as_str ( ) {
27- record. insert ( key_str, from_refarg ( val) ?) ;
27+ record. insert ( key_str, from_refarg ( val, span ) ?) ;
2828 }
2929 }
3030 }
31- Value :: record ( record, Span :: unknown ( ) )
31+ Value :: record ( record, span )
3232 } else if & * refarg. signature ( ) == "ay" {
3333 // Byte array - better to return as binary
3434 let bytes = dbus:: arg:: cast :: < Vec < u8 > > ( & refarg. box_clone ( ) ) . unwrap ( ) . to_owned ( ) ;
35- Value :: binary ( bytes, Span :: unknown ( ) )
35+ Value :: binary ( bytes, span )
3636 } else {
3737 // It's an array
3838 Value :: list (
39- refarg. as_iter ( ) . unwrap ( ) . map ( from_refarg) . flatten ( ) . collect ( ) ,
40- Span :: unknown ( ) )
39+ refarg. as_iter ( ) . unwrap ( ) . map ( |v| from_refarg ( v , span ) ) . flatten ( ) . collect ( ) ,
40+ span )
4141 }
4242 } ,
4343 ArgType :: Variant => {
4444 let inner = refarg. as_iter ( ) . unwrap ( ) . nth ( 0 ) . unwrap ( ) ;
45- return from_refarg ( inner) ;
45+ return from_refarg ( inner, span ) ;
4646 } ,
4747 ArgType :: Boolean =>
48- Value :: bool ( refarg. as_i64 ( ) . unwrap ( ) != 0 , Span :: unknown ( ) ) ,
48+ Value :: bool ( refarg. as_i64 ( ) . unwrap ( ) != 0 , span ) ,
4949
5050 // Strings
5151 ArgType :: String | ArgType :: ObjectPath | ArgType :: Signature =>
52- Value :: string ( refarg. as_str ( ) . unwrap ( ) , Span :: unknown ( ) ) ,
52+ Value :: string ( refarg. as_str ( ) . unwrap ( ) , span ) ,
5353 // Ints
5454 ArgType :: Byte | ArgType :: Int16 | ArgType :: UInt16 | ArgType :: Int32 |
5555 ArgType :: UInt32 | ArgType :: Int64 | ArgType :: UnixFd =>
56- Value :: int ( refarg. as_i64 ( ) . unwrap ( ) , Span :: unknown ( ) ) ,
56+ Value :: int ( refarg. as_i64 ( ) . unwrap ( ) , span ) ,
5757
5858 // Nushell doesn't support u64, so present it as a string
59- ArgType :: UInt64 => Value :: string ( refarg. as_u64 ( ) . unwrap ( ) . to_string ( ) , Span :: unknown ( ) ) ,
59+ ArgType :: UInt64 => Value :: string ( refarg. as_u64 ( ) . unwrap ( ) . to_string ( ) , span ) ,
6060
6161 // Floats
6262 ArgType :: Double =>
63- Value :: float ( refarg. as_f64 ( ) . unwrap ( ) , Span :: unknown ( ) ) ,
63+ Value :: float ( refarg. as_f64 ( ) . unwrap ( ) , span ) ,
6464
6565 ArgType :: Struct =>
6666 Value :: list (
67- refarg. as_iter ( ) . unwrap ( ) . map ( from_refarg) . flatten ( ) . collect ( ) ,
68- Span :: unknown ( ) ) ,
67+ refarg. as_iter ( ) . unwrap ( ) . map ( |v| from_refarg ( v , span ) ) . flatten ( ) . collect ( ) ,
68+ span ) ,
6969
7070 ArgType :: DictEntry =>
7171 return Err ( "Encountered dictionary entry outside of dictionary" . into ( ) ) ,
0 commit comments