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; } }
Optional<SchemaError> validate(ValidationContext&, const dynamic& value) const override { if (!value.isString() || regex_.empty()) { return none; } if (!boost::regex_search(value.getString().toStdString(), regex_)) { return makeError("string matching regex", value); } return none; }
explicit StringPatternValidator(const dynamic& schema) { if (schema.isString()) { regex_ = boost::regex(schema.getString().toStdString()); } }