Add support for QByteArray

master
Jos van den Oever 2017-08-08 20:50:36 +02:00
parent 81b9aa29e5
commit 08753ff63a
4 changed files with 45 additions and 4 deletions

View File

@ -22,6 +22,10 @@
"name": "misc",
"type": "QVariant",
"write": true
}, {
"name": "icon",
"type": "QByteArray",
"write": true
}]
}]
}

View File

@ -8,6 +8,7 @@ pub struct Test {
age: c_int,
active: bool,
misc: Variant,
icon: Vec<u8>,
}
impl TestTrait for Test {
@ -18,6 +19,7 @@ impl TestTrait for Test {
age: 0,
active: true,
misc: Variant::None,
icon: Vec::new(),
}
}
fn emit(&self) -> &TestEmitter {
@ -47,4 +49,11 @@ impl TestTrait for Test {
self.misc = value;
self.emit.misc_changed();
}
fn get_icon(&self) -> Vec<u8> {
self.icon.clone()
}
fn set_icon(&mut self, value: Vec<u8>) {
self.icon = value;
self.emit.icon_changed();
}
}

View File

@ -31,6 +31,28 @@ impl<'a> From<&'a String> for QString {
}
}
#[repr(C)]
pub struct QByteArray {
data: *const uint8_t,
len: c_int,
}
impl QByteArray {
pub fn convert(&self) -> Vec<u8> {
let data = unsafe { slice::from_raw_parts(self.data, self.len as usize) };
Vec::from(data)
}
}
impl<'a> From<&'a Vec<u8>> for QByteArray {
fn from(value: &'a Vec<u8>) -> QByteArray {
QByteArray {
len: value.len() as c_int,
data: value.as_ptr(),
}
}
}
pub enum Variant {
None,
Bool(bool),

View File

@ -250,6 +250,10 @@ namespace {
const char* data;
int len;
public:
qbytearray_t(const QByteArray& v):
data(v.data()),
len(v.size()) {
}
operator QByteArray() const {
return QByteArray(data, len);
}
@ -336,6 +340,10 @@ typedef void (*qstring_set)(QString*, qstring_t*);
void set_qstring(QString* v, qstring_t* val) {
*v = *val;
}
typedef void (*qbytearray_set)(QByteArray*, qbytearray_t*);
void set_qbytearray(QByteArray* v, qbytearray_t* val) {
*v = *val;
}
typedef void (*qvariant_set)(QVariant*, qvariant_t*);
void set_qvariant(QVariant* v, qvariant_t* val) {
*v = variant(*val);
@ -355,11 +363,9 @@ extern "C" {
}
QString rustType(const Property& p) {
/*
if (p.type == "QVariant") {
return "Variant";
if (p.type == "QByteArray") {
return "Vec<u8>";
}
*/
if (p.type.startsWith("Q")) {
return p.type.mid(1);
}