55#include < contrib/libs/simdjson/include/simdjson/dom/element-inl.h>
66#include < contrib/libs/simdjson/include/simdjson/dom/object-inl.h>
77#include < contrib/libs/simdjson/include/simdjson/dom/parser-inl.h>
8- #include < contrib/libs/simdjson/include/simdjson/ondemand.h>
98#include < library/cpp/json/json_reader.h>
109#include < util/generic/algorithm.h>
1110#include < util/generic/map.h>
@@ -609,92 +608,6 @@ void SimdJsonToJsonIndex(const simdjson::dom::element& value, TBinaryJsonCallbac
609608 }
610609 }
611610}
612-
613- template <typename TOnDemandValue>
614- requires std::is_same_v<TOnDemandValue, simdjson::ondemand::value> || std::is_same_v<TOnDemandValue, simdjson::ondemand::document>
615- simdjson::error_code SimdJsonToJsonIndex (TOnDemandValue& value, TBinaryJsonCallbacks& callbacks) {
616- #define RETURN_IF_NOT_SUCCESS (error ) \
617- if (Y_UNLIKELY (error != simdjson::SUCCESS)) { \
618- return error; \
619- }
620-
621- switch (value.type ()) {
622- case simdjson::ondemand::json_type::string: {
623- std::string_view v;
624- RETURN_IF_NOT_SUCCESS (value.get (v));
625- callbacks.OnString (v);
626- break ;
627- }
628- case simdjson::ondemand::json_type::boolean: {
629- bool v;
630- RETURN_IF_NOT_SUCCESS (value.get (v));
631- callbacks.OnBoolean (v);
632- break ;
633- }
634- case simdjson::ondemand::json_type::number: {
635- switch (value.get_number_type ()) {
636- case simdjson::fallback::number_type::floating_point_number: {
637- double v;
638- RETURN_IF_NOT_SUCCESS (value.get (v));
639- callbacks.OnDouble (v);
640- break ;
641- }
642- case simdjson::fallback::number_type::signed_integer: {
643- i64 v;
644- RETURN_IF_NOT_SUCCESS (value.get (v));
645- callbacks.OnInteger (v);
646- break ;
647- }
648- case simdjson::fallback::number_type::unsigned_integer: {
649- ui64 v;
650- RETURN_IF_NOT_SUCCESS (value.get (v));
651- callbacks.OnUInteger (v);
652- break ;
653- }
654- case simdjson::fallback::number_type::big_integer:
655- return simdjson::NUMBER_OUT_OF_RANGE;
656- }
657- break ;
658- }
659- case simdjson::ondemand::json_type::null:
660- callbacks.OnNull ();
661- break ;
662- case simdjson::ondemand::json_type::array: {
663- callbacks.OnOpenArray ();
664-
665- simdjson::ondemand::array v;
666- RETURN_IF_NOT_SUCCESS (value.get (v));
667- for (auto item : v) {
668- RETURN_IF_NOT_SUCCESS (item.error ());
669- RETURN_IF_NOT_SUCCESS (SimdJsonToJsonIndex (item.value_unsafe (), callbacks));
670- }
671-
672- callbacks.OnCloseArray ();
673- break ;
674- }
675- case simdjson::ondemand::json_type::object: {
676- callbacks.OnOpenMap ();
677-
678- simdjson::ondemand::object v;
679- RETURN_IF_NOT_SUCCESS (value.get (v));
680- for (auto item : v) {
681- RETURN_IF_NOT_SUCCESS (item.error ());
682- auto & keyValue = item.value_unsafe ();
683- const auto key = keyValue.unescaped_key ();
684- RETURN_IF_NOT_SUCCESS (key.error ());
685- callbacks.OnMapKey (key.value_unsafe ());
686- RETURN_IF_NOT_SUCCESS (SimdJsonToJsonIndex (keyValue.value (), callbacks));
687- }
688-
689- callbacks.OnCloseMap ();
690- break ;
691- }
692- }
693-
694- return simdjson::SUCCESS;
695-
696- #undef RETURN_IF_NOT_SUCCESS
697- }
698611}
699612
700613TMaybe<TBinaryJson> SerializeToBinaryJsonImpl (const TStringBuf json) {
@@ -713,31 +626,6 @@ TMaybe<TBinaryJson> SerializeToBinaryJson(const TStringBuf json) {
713626 return SerializeToBinaryJsonImpl (json);
714627}
715628
716- TMaybe<TBinaryJson> SerializeToBinaryJsonOndemand (const TStringBuf json) {
717- const simdjson::padded_string paddedJson (json);
718- simdjson::ondemand::parser parser;
719- auto doc = parser.iterate(paddedJson);
720- if (doc.error () != simdjson::SUCCESS) {
721- return false ;
722- }
723- TBinaryJsonCallbacks callbacks (/* throwException */ false );
724- if (SimdJsonToJsonIndex (doc.value_unsafe (), callbacks) != simdjson::SUCCESS) {
725- return false ;
726- }
727- TBinaryJsonSerializer serializer (std::move (callbacks).GetResult ());
728- return std::move (serializer).Serialize ();
729- }
730-
731- TMaybe<TBinaryJson> SerializeToBinaryJsonRapidjson (const TStringBuf json) {
732- TMemoryInput input (json.data (), json.size ());
733- TBinaryJsonCallbacks callbacks (/* throwException */ false );
734- if (!ReadJson (&input, &callbacks)) {
735- return Nothing ();
736- }
737- TBinaryJsonSerializer serializer (std::move (callbacks).GetResult ());
738- return std::move (serializer).Serialize ();
739- }
740-
741629TBinaryJson SerializeToBinaryJson (const NUdf::TUnboxedValue& value) {
742630 TBinaryJsonCallbacks callbacks (/* throwException */ false );
743631 DomToJsonIndex (value, callbacks);
0 commit comments