diff options
author | rsgowman <rgowman@google.com> | 2018-02-22 09:42:40 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-22 09:42:40 -0500 |
commit | 6ce954a791a73abc8d32765e2695ed153e120c47 (patch) | |
tree | e9fe172b309156e2e4bc147c0452ea712a0102b5 /Firestore/core/src/firebase/firestore/remote | |
parent | 41dcd4bd17708779b45982d9547215924f2e5fd5 (diff) |
Serialize (and deserialize) int64 values (#818) (#829)
Diffstat (limited to 'Firestore/core/src/firebase/firestore/remote')
-rw-r--r-- | Firestore/core/src/firebase/firestore/remote/serializer.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Firestore/core/src/firebase/firestore/remote/serializer.cc b/Firestore/core/src/firebase/firestore/remote/serializer.cc index fda257b..396608b 100644 --- a/Firestore/core/src/firebase/firestore/remote/serializer.cc +++ b/Firestore/core/src/firebase/firestore/remote/serializer.cc @@ -98,6 +98,15 @@ bool DecodeBool(pb_istream_t* stream) { } } +void EncodeInteger(pb_ostream_t* stream, int64_t integer_value) { + return EncodeVarint(stream, google_firestore_v1beta1_Value_integer_value_tag, + integer_value); +} + +int64_t DecodeInteger(pb_istream_t* stream) { + return DecodeVarint(stream); +} + } // namespace using firebase::firestore::model::FieldValue; @@ -118,6 +127,9 @@ Serializer::TypedValue Serializer::EncodeFieldValue( proto_value.value.boolean_value = false; } break; + case FieldValue::Type::Integer: + proto_value.value.integer_value = field_value.integer_value(); + break; default: // TODO(rsgowman): implement the other types abort(); @@ -141,6 +153,10 @@ void Serializer::EncodeTypedValue(const TypedValue& value, EncodeBool(&stream, value.value.boolean_value); break; + case FieldValue::Type::Integer: + EncodeInteger(&stream, value.value.integer_value); + break; + default: // TODO(rsgowman): implement the other types abort(); @@ -156,6 +172,8 @@ FieldValue Serializer::DecodeFieldValue( return FieldValue::NullValue(); case FieldValue::Type::Boolean: return FieldValue::BooleanValue(value_proto.value.boolean_value); + case FieldValue::Type::Integer: + return FieldValue::IntegerValue(value_proto.value.integer_value); default: // TODO(rsgowman): implement the other types abort(); @@ -185,6 +203,10 @@ Serializer::TypedValue Serializer::DecodeTypedValue(const uint8_t* bytes, result.type = FieldValue::Type::Boolean; result.value.boolean_value = DecodeBool(&stream); break; + case google_firestore_v1beta1_Value_integer_value_tag: + result.type = FieldValue::Type::Integer; + result.value.integer_value = DecodeInteger(&stream); + break; default: // TODO(rsgowman): figure out error handling @@ -209,6 +231,8 @@ bool operator==(const Serializer::TypedValue& lhs, return true; case FieldValue::Type::Boolean: return lhs.value.boolean_value == rhs.value.boolean_value; + case FieldValue::Type::Integer: + return lhs.value.integer_value == rhs.value.integer_value; default: // TODO(rsgowman): implement the other types abort(); |