Fancy serializer: Split object and array handling into functions
This commit is contained in:
parent
0500d41fbb
commit
f180227b6d
@ -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('\"');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user