From 6ce954a791a73abc8d32765e2695ed153e120c47 Mon Sep 17 00:00:00 2001 From: rsgowman Date: Thu, 22 Feb 2018 09:42:40 -0500 Subject: Serialize (and deserialize) int64 values (#818) (#829) --- .../src/firebase/firestore/remote/serializer.cc | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'Firestore/core/src/firebase/firestore/remote') 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(); -- cgit v1.2.3