aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/src/firebase/firestore/remote
diff options
context:
space:
mode:
authorGravatar rsgowman <rgowman@google.com>2018-02-22 09:42:40 -0500
committerGravatar GitHub <noreply@github.com>2018-02-22 09:42:40 -0500
commit6ce954a791a73abc8d32765e2695ed153e120c47 (patch)
treee9fe172b309156e2e4bc147c0452ea712a0102b5 /Firestore/core/src/firebase/firestore/remote
parent41dcd4bd17708779b45982d9547215924f2e5fd5 (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.cc24
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();