Add serialization for RID and Signal

This commit is contained in:
MinusKube 2022-06-30 02:15:04 +02:00
parent 44516d1a5c
commit f67891fcd1

View File

@ -532,7 +532,13 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
} break;
case Variant::RID: {
r_variant = RID();
ERR_FAIL_COND_V(len < 8, ERR_INVALID_DATA);
uint64_t id = decode_uint64(buf);
if (r_len) {
(*r_len) += 8;
}
r_variant = RID::from_uint64(id);
} break;
case Variant::OBJECT: {
if (type & ENCODE_FLAG_OBJECT_AS_ID) {
@ -614,9 +620,20 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
r_variant = Callable();
} break;
case Variant::SIGNAL: {
r_variant = Signal();
} break;
String name;
Error err = _decode_string(buf, len, r_len, name);
if (err) {
return err;
}
ERR_FAIL_COND_V(len < 8, ERR_INVALID_DATA);
ObjectID id = ObjectID(decode_uint64(buf));
if (r_len) {
(*r_len) += 8;
}
r_variant = Signal(id, StringName(name));
} break;
case Variant::DICTIONARY: {
ERR_FAIL_COND_V(len < 4, ERR_INVALID_DATA);
int32_t count = decode_uint32(buf);
@ -1352,10 +1369,12 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
} break;
case Variant::RID: {
} break;
case Variant::CALLABLE: {
} break;
case Variant::SIGNAL: {
RID rid = p_variant;
if (buf) {
encode_uint64(rid.get_id(), buf);
}
r_len += 8;
} break;
case Variant::OBJECT: {
if (p_full_objects) {
@ -1419,6 +1438,18 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
}
} break;
case Variant::CALLABLE: {
} break;
case Variant::SIGNAL: {
Signal signal = p_variant;
_encode_string(signal.get_name(), buf, r_len);
if (buf) {
encode_uint64(signal.get_object_id(), buf);
}
r_len += 8;
} break;
case Variant::DICTIONARY: {
Dictionary d = p_variant;