Fancy serializer: Split object and array handling into functions

This commit is contained in:
Evan Driscoll 2018-06-02 20:30:12 -05:00
parent 0500d41fbb
commit f180227b6d

View File

@ -87,6 +87,70 @@ class fancy_serializer
switch (val.m_type) switch (val.m_type)
{ {
case value_t::object: case value_t::object:
{
dump_object(val, ensure_ascii, current_indent);
return;
}
case value_t::array:
{
dump_array(val, ensure_ascii, current_indent);
return;
}
case value_t::string:
{
dump_string(*val.m_value.string, ensure_ascii);
return;
}
case value_t::boolean:
{
if (val.m_value.boolean)
{
o->write_characters("true", 4);
}
else
{
o->write_characters("false", 5);
}
return;
}
case value_t::number_integer:
{
prim_serializer.dump_integer(*o, val.m_value.number_integer);
return;
}
case value_t::number_unsigned:
{
prim_serializer.dump_integer(*o, val.m_value.number_unsigned);
return;
}
case value_t::number_float:
{
prim_serializer.dump_float(*o, val.m_value.number_float);
return;
}
case value_t::discarded:
{
o->write_characters("<discarded>", 11);
return;
}
case value_t::null:
{
o->write_characters("null", 4);
return;
}
}
}
private:
void dump_object(const BasicJsonType & val, bool ensure_ascii, unsigned int current_indent)
{ {
if (val.m_value.object->empty()) if (val.m_value.object->empty())
{ {
@ -155,11 +219,9 @@ class fancy_serializer
o->write_character('}'); o->write_character('}');
} }
return;
} }
case value_t::array: void dump_array(const BasicJsonType & val, bool ensure_ascii, unsigned int current_indent)
{ {
if (val.m_value.array->empty()) if (val.m_value.array->empty())
{ {
@ -214,62 +276,8 @@ class fancy_serializer
o->write_character(']'); o->write_character(']');
} }
return;
} }
case value_t::string:
{
dump_string(*val.m_value.string, ensure_ascii);
return;
}
case value_t::boolean:
{
if (val.m_value.boolean)
{
o->write_characters("true", 4);
}
else
{
o->write_characters("false", 5);
}
return;
}
case value_t::number_integer:
{
prim_serializer.dump_integer(*o, val.m_value.number_integer);
return;
}
case value_t::number_unsigned:
{
prim_serializer.dump_integer(*o, val.m_value.number_unsigned);
return;
}
case value_t::number_float:
{
prim_serializer.dump_float(*o, val.m_value.number_float);
return;
}
case value_t::discarded:
{
o->write_characters("<discarded>", 11);
return;
}
case value_t::null:
{
o->write_characters("null", 4);
return;
}
}
}
private:
void dump_string(string_t const& str, bool ensure_ascii) void dump_string(string_t const& str, bool ensure_ascii)
{ {
o->write_character('\"'); o->write_character('\"');