static void bserEncode(dynamic const& dyn, QueueAppender& appender, const serialization_opts& opts) { switch (dyn.type()) { case dynamic::Type::NULLT: appender.write((int8_t)BserType::Null); return; case dynamic::Type::BOOL: appender.write( (int8_t)(dyn.getBool() ? BserType::True : BserType::False)); return; case dynamic::Type::DOUBLE: { double dval = dyn.getDouble(); appender.write((int8_t)BserType::Real); appender.write(dval); return; } case dynamic::Type::INT64: bserEncodeInt(dyn.getInt(), appender); return; case dynamic::Type::OBJECT: bserEncodeObject(dyn, appender, opts); return; case dynamic::Type::ARRAY: bserEncodeArray(dyn, appender, opts); return; case dynamic::Type::STRING: bserEncodeString(dyn.getString(), appender); return; } }
TEST(Dynamic, GetSmallThings) { const dynamic cint(5); const dynamic cdouble(5.0); const dynamic cbool(true); dynamic dint(5); dynamic ddouble(5.0); dynamic dbool(true); dynamic mint(5); dynamic mdouble(5.0); dynamic mbool(true); EXPECT_EQ(5, cint.getInt()); dint.getInt() = 6; EXPECT_EQ(6, dint.getInt()); EXPECT_EQ(5, std::move(mint).getInt()); EXPECT_EQ(5.0, cdouble.getDouble()); ddouble.getDouble() = 6.0; EXPECT_EQ(6.0, ddouble.getDouble()); EXPECT_EQ(5.0, std::move(mdouble).getDouble()); EXPECT_EQ(true, cbool.getBool()); dbool.getBool() = false; EXPECT_FALSE(dbool.getBool()); EXPECT_EQ(true, std::move(mbool).getBool()); }
explicit SizeValidator(const dynamic& schema, dynamic::Type type) : length_(-1), type_(type) { if (schema.isInt()) { length_ = schema.getInt(); } }