summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2017-05-01 13:10:07 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2017-05-01 13:10:07 -0400
commitdb53b03f5c1420b9bcade637873522f1847f9e3f (patch)
tree8872e0b06d93315344cfa86c3ae14c9688c05d6e /src/mongo
parent3aa8750877642f7985c1bd0da4bbb753a5161100 (diff)
downloadmongo-db53b03f5c1420b9bcade637873522f1847f9e3f.tar.gz
SERVER-28985 Change IDL serialization contract for objects
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/idl/idl_test.cpp24
-rw-r--r--src/mongo/idl/idl_test_types.h34
2 files changed, 50 insertions, 8 deletions
diff --git a/src/mongo/idl/idl_test.cpp b/src/mongo/idl/idl_test.cpp
index 8706d8fc643..c2063b8f9cb 100644
--- a/src/mongo/idl/idl_test.cpp
+++ b/src/mongo/idl/idl_test.cpp
@@ -232,13 +232,25 @@ TEST(IDLOneTypeTests, TestAnyType) {
{
auto testDoc = BSON("value"
<< "Foo");
- One_any_basic_type::parse(ctxt, testDoc);
+ auto testStruct = One_any_basic_type::parse(ctxt, testDoc);
+
+ BSONObjBuilder builder;
+ testStruct.serialize(&builder);
+
+ auto serializedDoc = builder.obj();
+ ASSERT_BSONOBJ_EQ(testDoc, serializedDoc);
}
// Positive: int field
{
auto testDoc = BSON("value" << 12);
- One_any_basic_type::parse(ctxt, testDoc);
+ auto testStruct = One_any_basic_type::parse(ctxt, testDoc);
+
+ BSONObjBuilder builder;
+ testStruct.serialize(&builder);
+
+ auto serializedDoc = builder.obj();
+ ASSERT_BSONOBJ_EQ(testDoc, serializedDoc);
}
}
@@ -250,7 +262,13 @@ TEST(IDLOneTypeTests, TestObjectType) {
{
auto testDoc = BSON("value" << BSON("value"
<< "foo"));
- One_any_basic_type::parse(ctxt, testDoc);
+ auto testStruct = One_any_basic_type::parse(ctxt, testDoc);
+
+ BSONObjBuilder builder;
+ testStruct.serialize(&builder);
+
+ auto serializedDoc = builder.obj();
+ ASSERT_BSONOBJ_EQ(testDoc, serializedDoc);
}
}
diff --git a/src/mongo/idl/idl_test_types.h b/src/mongo/idl/idl_test_types.h
index ca1e7e2853c..41f75c796f0 100644
--- a/src/mongo/idl/idl_test_types.h
+++ b/src/mongo/idl/idl_test_types.h
@@ -38,11 +38,28 @@ namespace mongo {
*/
class AnyBasicType {
public:
- static AnyBasicType parse(BSONElement element) {
- return AnyBasicType();
+ static AnyBasicType parse(const BSONElement& element) {
+ AnyBasicType any;
+ any._element = element;
+ return any;
}
- void serialize(BSONObjBuilder* builder) const {}
+ /**
+ * Serialize this class as a field in a document.
+ */
+ void serialize(StringData fieldName, BSONObjBuilder* builder) const {
+ builder->appendAs(_element, fieldName);
+ }
+
+ /**
+ * Serialize this class as an element of a BSON array.
+ */
+ void serialize(BSONArrayBuilder* builder) const {
+ builder->append(_element);
+ }
+
+private:
+ BSONElement _element;
};
/**
@@ -52,10 +69,17 @@ public:
class ObjectBasicType {
public:
static ObjectBasicType parse(const BSONObj& obj) {
- return ObjectBasicType();
+ ObjectBasicType object;
+ object._obj = obj.getOwned();
+ return object;
+ }
+
+ const BSONObj serialize() const {
+ return _obj;
}
- void serialize(BSONObjBuilder* builder) const {}
+private:
+ BSONObj _obj;
};
} // namespace mongo