Add serialization for RID and Signal
This commit is contained in:
parent
44516d1a5c
commit
f67891fcd1
@ -532,7 +532,13 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::RID: {
|
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;
|
} break;
|
||||||
case Variant::OBJECT: {
|
case Variant::OBJECT: {
|
||||||
if (type & ENCODE_FLAG_OBJECT_AS_ID) {
|
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();
|
r_variant = Callable();
|
||||||
} break;
|
} break;
|
||||||
case Variant::SIGNAL: {
|
case Variant::SIGNAL: {
|
||||||
r_variant = Signal();
|
String name;
|
||||||
} break;
|
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: {
|
case Variant::DICTIONARY: {
|
||||||
ERR_FAIL_COND_V(len < 4, ERR_INVALID_DATA);
|
ERR_FAIL_COND_V(len < 4, ERR_INVALID_DATA);
|
||||||
int32_t count = decode_uint32(buf);
|
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;
|
} break;
|
||||||
case Variant::RID: {
|
case Variant::RID: {
|
||||||
} break;
|
RID rid = p_variant;
|
||||||
case Variant::CALLABLE: {
|
|
||||||
} break;
|
if (buf) {
|
||||||
case Variant::SIGNAL: {
|
encode_uint64(rid.get_id(), buf);
|
||||||
|
}
|
||||||
|
r_len += 8;
|
||||||
} break;
|
} break;
|
||||||
case Variant::OBJECT: {
|
case Variant::OBJECT: {
|
||||||
if (p_full_objects) {
|
if (p_full_objects) {
|
||||||
@ -1419,6 +1438,18 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} 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: {
|
case Variant::DICTIONARY: {
|
||||||
Dictionary d = p_variant;
|
Dictionary d = p_variant;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user