Add string conversion to QVariant
parent
acd4c0852a
commit
e468359100
|
@ -96,8 +96,12 @@ impl<'a> QVariant<'a> {
|
||||||
self.type_ as u32
|
self.type_ as u32
|
||||||
}
|
}
|
||||||
pub fn convert(&self) -> Variant {
|
pub fn convert(&self) -> Variant {
|
||||||
// TODO
|
match (self.type_) {
|
||||||
Variant::None
|
10 => {
|
||||||
|
Variant::String(String::new())
|
||||||
|
}
|
||||||
|
_ => Variant::None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,6 @@ function(rust_test NAME DIRECTORY)
|
||||||
MAIN_DEPENDENCY "${NAME}.json"
|
MAIN_DEPENDENCY "${NAME}.json"
|
||||||
DEPENDS "${GENERATOR}"
|
DEPENDS "${GENERATOR}"
|
||||||
)
|
)
|
||||||
# add_custom_target("${DIRECTORY}"
|
|
||||||
# DEPENDS "${DIR}/src/inferface.rs")
|
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${DIR}/${RUST_TARGET_DIR}/librust.a"
|
OUTPUT "${DIR}/${RUST_TARGET_DIR}/librust.a"
|
||||||
|
@ -39,7 +37,8 @@ function(rust_test NAME DIRECTORY)
|
||||||
"${DIR}/${RUST_TARGET_DIR}/librust.a"
|
"${DIR}/${RUST_TARGET_DIR}/librust.a"
|
||||||
)
|
)
|
||||||
set_property(TARGET ${NAME}
|
set_property(TARGET ${NAME}
|
||||||
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h")
|
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h"
|
||||||
|
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.cpp")
|
||||||
|
|
||||||
add_test("build_${NAME}"
|
add_test("build_${NAME}"
|
||||||
"${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target "${NAME}")
|
"${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target "${NAME}")
|
||||||
|
|
|
@ -96,8 +96,16 @@ impl<'a> QVariant<'a> {
|
||||||
self.type_ as u32
|
self.type_ as u32
|
||||||
}
|
}
|
||||||
pub fn convert(&self) -> Variant {
|
pub fn convert(&self) -> Variant {
|
||||||
// TODO
|
match self.type_ {
|
||||||
Variant::None
|
10 => {
|
||||||
|
let data = unsafe {
|
||||||
|
let d = self.data as *const uint16_t;
|
||||||
|
slice::from_raw_parts(d, self.len as usize)
|
||||||
|
};
|
||||||
|
Variant::String(String::from_utf16_lossy(data))
|
||||||
|
}
|
||||||
|
_ => Variant::None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "test_object_rust.h"
|
#include "test_object_types_rust.h"
|
||||||
#include <QTest>
|
#include <QTest>
|
||||||
#include <QSignalSpy>
|
#include <QSignalSpy>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
class TestRustObject : public QObject
|
class TestRustObject : public QObject
|
||||||
{
|
{
|
||||||
|
@ -26,15 +27,17 @@ void TestRustObject::testStringSetter()
|
||||||
{
|
{
|
||||||
// GIVEN
|
// GIVEN
|
||||||
Person person;
|
Person person;
|
||||||
|
const QVariant userName(QString("Konqi"));
|
||||||
QSignalSpy spy(&person, &Person::userNameChanged);
|
QSignalSpy spy(&person, &Person::userNameChanged);
|
||||||
|
|
||||||
// WHEN
|
// WHEN
|
||||||
person.setUserName("Konqi");
|
person.setUserName(userName);
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
QVERIFY(spy.isValid());
|
QVERIFY(spy.isValid());
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(spy.count(), 1);
|
||||||
QCOMPARE(person.userName(), QString("Konqi"));
|
QCOMPARE(person.userName().type(), userName.type());
|
||||||
|
QCOMPARE(person.userName(), userName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QTEST_MAIN(TestRustObject)
|
QTEST_MAIN(TestRustObject)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
"type": "Object",
|
"type": "Object",
|
||||||
"properties": [{
|
"properties": [{
|
||||||
"name": "userName",
|
"name": "userName",
|
||||||
"type": "QString",
|
"type": "QVariant",
|
||||||
"write": true
|
"write": true
|
||||||
}]
|
}]
|
||||||
}]
|
}]
|
||||||
|
|
|
@ -110,8 +110,8 @@ void set_qvariant(QVariant* v, qvariant_t* val) {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
PersonInterface* person_new(Person*, void (*)(Person*));
|
PersonInterface* person_new(Person*, void (*)(Person*));
|
||||||
void person_free(PersonInterface*);
|
void person_free(PersonInterface*);
|
||||||
void person_user_name_get(PersonInterface*, QString*, qstring_set);
|
void person_user_name_get(PersonInterface*, QVariant*, qvariant_set);
|
||||||
void person_user_name_set(void*, qstring_t);
|
void person_user_name_set(void*, qvariant_t);
|
||||||
};
|
};
|
||||||
Person::Person(QObject *parent):
|
Person::Person(QObject *parent):
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
|
@ -121,12 +121,12 @@ Person::Person(QObject *parent):
|
||||||
Person::~Person() {
|
Person::~Person() {
|
||||||
person_free(d);
|
person_free(d);
|
||||||
}
|
}
|
||||||
QString Person::userName() const
|
QVariant Person::userName() const
|
||||||
{
|
{
|
||||||
QString v;
|
QVariant v;
|
||||||
person_user_name_get(d, &v, set_qstring);
|
person_user_name_get(d, &v, set_qvariant);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
void Person::setUserName(const QString& v) {
|
void Person::setUserName(const QVariant& v) {
|
||||||
person_user_name_set(d, v);
|
variant(v, d, person_user_name_set);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,15 +11,15 @@ class Person : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
PersonInterface * const d;
|
PersonInterface * const d;
|
||||||
Q_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged FINAL)
|
Q_PROPERTY(QVariant userName READ userName WRITE setUserName NOTIFY userNameChanged FINAL)
|
||||||
public:
|
public:
|
||||||
explicit Person(QObject *parent = nullptr);
|
explicit Person(QObject *parent = nullptr);
|
||||||
~Person();
|
~Person();
|
||||||
QString userName() const;
|
QVariant userName() const;
|
||||||
void setUserName(const QString& v);
|
void setUserName(const QVariant& v);
|
||||||
signals:
|
signals:
|
||||||
void userNameChanged();
|
void userNameChanged();
|
||||||
private:
|
private:
|
||||||
QString m_userName;
|
QVariant m_userName;
|
||||||
};
|
};
|
||||||
#endif // TEST_OBJECT_TYPES_RUST_H
|
#endif // TEST_OBJECT_TYPES_RUST_H
|
||||||
|
|
Loading…
Reference in New Issue