1
1
use std:: fmt;
2
2
3
3
use crate :: {
4
- cpp, cpp_class, QByteArray , QDate , QDateTime , QString , QStringList , QTime , QUrl , QVariantList ,
4
+ cpp, cpp_class, QByteArray , QDate , QDateTime , QString , QStringList , QTime , QUrl , QVariantList , QVariantMap
5
5
} ;
6
6
7
7
cpp_class ! (
@@ -57,12 +57,54 @@ impl QVariant {
57
57
} )
58
58
}
59
59
60
+ /// Wrapper around [`toMap()`][method] method.
61
+ ///
62
+ /// [method]: https://doc.qt.io/qt-5/qvariant.html#toMap
63
+ pub fn to_qvariantmap ( & self ) -> QVariantMap {
64
+ cpp ! ( unsafe [ self as "const QVariant*" ] -> QVariantMap as "QVariantMap" {
65
+ return self ->toMap( ) ;
66
+ } )
67
+ }
68
+
69
+ /// Wrapper around [`toString()`][method] method.
70
+ ///
71
+ /// [method]: https://doc.qt.io/qt-5/qvariant.html#toString
72
+ pub fn to_qstring ( & self ) -> QString {
73
+ cpp ! ( unsafe [ self as "const QVariant*" ] -> QString as "QString" {
74
+ return self ->toString( ) ;
75
+ } )
76
+ }
77
+
78
+ /// Wrapper around [`toInt()`][method] method.
79
+ ///
80
+ /// [method]: https://doc.qt.io/qt-5/qvariant.html#toInt
81
+ pub fn to_int ( & self ) -> u32 {
82
+ cpp ! ( unsafe [ self as "const QVariant*" ] -> u32 as "int" {
83
+ return self ->toInt( ) ;
84
+ } )
85
+ }
86
+
87
+ /// Wrapper around ['typeName()`][method] method.
88
+ ///
89
+ /// [method]: https://doc.qt.io/qt-5/qvariant.html#typeName
90
+ pub fn type_name ( & self ) -> QString {
91
+ cpp ! ( unsafe [ self as "const QVariant*" ] -> QString as "QString" {
92
+ return self ->typeName( ) ;
93
+ } )
94
+ }
95
+
60
96
// FIXME: do more wrappers
61
97
}
62
98
63
99
impl fmt:: Debug for QVariant {
64
100
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
65
- f. write_str ( self . to_qbytearray ( ) . to_string ( ) . as_str ( ) )
101
+ let data = self . to_qstring ( ) . to_string ( ) ;
102
+ let qtype = self . type_name ( ) . to_string ( ) ;
103
+ if data. len ( ) == 0 {
104
+ write ! ( f, "QVariant({})" , qtype. as_str( ) )
105
+ } else {
106
+ write ! ( f, "QVariant({}: \" {}\" )" , qtype. as_str( ) , data. as_str( ) )
107
+ }
66
108
}
67
109
}
68
110
@@ -226,3 +268,29 @@ where
226
268
( * a) . clone ( ) . into ( )
227
269
}
228
270
}
271
+
272
+ #[ cfg( test) ]
273
+ mod tests {
274
+ use super :: * ;
275
+
276
+ #[ test]
277
+ fn qvariant_debug_qstring ( ) {
278
+ let qv: QVariant = QString :: from ( "Hello, QVariant!" ) . into ( ) ;
279
+ assert_eq ! ( qv. to_qstring( ) . to_string( ) , "Hello, QVariant!" ) ;
280
+ assert_eq ! ( format!( "{:?}" , qv) , "QVariant(QString: \" Hello, QVariant!\" )" ) ;
281
+ }
282
+
283
+ #[ test]
284
+ fn qvariant_debug_bool ( ) {
285
+ let qv = QVariant :: from ( false ) ;
286
+ assert_eq ! ( qv. to_qstring( ) . to_string( ) , String :: from( "false" ) ) ;
287
+ assert_eq ! ( format!( "{:?}" , qv) , "QVariant(bool: \" false\" )" ) ;
288
+ }
289
+
290
+ #[ test]
291
+ fn qvariant_debug_int ( ) {
292
+ let qv = QVariant :: from ( 313 ) ;
293
+ assert_eq ! ( qv. to_int( ) , 313 ) ;
294
+ assert_eq ! ( format!( "{:?}" , qv) , "QVariant(int: \" 313\" )" ) ;
295
+ }
296
+ }
0 commit comments