diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2017-05-01 13:10:07 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2017-05-01 13:10:07 -0400 |
commit | db53b03f5c1420b9bcade637873522f1847f9e3f (patch) | |
tree | 8872e0b06d93315344cfa86c3ae14c9688c05d6e /src/mongo | |
parent | 3aa8750877642f7985c1bd0da4bbb753a5161100 (diff) | |
download | mongo-db53b03f5c1420b9bcade637873522f1847f9e3f.tar.gz |
SERVER-28985 Change IDL serialization contract for objects
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/idl/idl_test.cpp | 24 | ||||
-rw-r--r-- | src/mongo/idl/idl_test_types.h | 34 |
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 |