Fancy serializer: styles continue to propagate if not overridden

This is half a bug fix half just continuing work from befor
This commit is contained in:
Evan Driscoll 2018-06-02 23:17:42 -05:00
parent 186c7df25a
commit ef679f8988
3 changed files with 32 additions and 8 deletions

View File

@ -58,10 +58,12 @@ class basic_fancy_serializer_stylizer
return default_style; return default_style;
} }
const fancy_serializer_style& get_style(const string_t& j) const const fancy_serializer_style* get_new_style_or_active(
const string_t& j,
const fancy_serializer_style* active_style) const
{ {
auto iter = key_styles.find(j); auto iter = key_styles.find(j);
return iter == key_styles.end() ? default_style : iter->second; return iter == key_styles.end() ? active_style : &iter->second;
} }
fancy_serializer_style& get_or_insert_style(const string_t& j) fancy_serializer_style& get_or_insert_style(const string_t& j)
@ -236,7 +238,7 @@ class fancy_serializer
o->write_character('\"'); o->write_character('\"');
prim_serializer.dump_escaped(*o, i->first, ensure_ascii); prim_serializer.dump_escaped(*o, i->first, ensure_ascii);
o->write_characters("\": ", 2 + newline_len); o->write_characters("\": ", 2 + newline_len);
auto new_style = &stylizer.get_style(i->first); auto new_style = stylizer.get_new_style_or_active(i->first, active_style);
dump(i->second, ensure_ascii, depth + 1, new_style); dump(i->second, ensure_ascii, depth + 1, new_style);
o->write_characters(",\n", 1 + newline_len); o->write_characters(",\n", 1 + newline_len);
} }
@ -248,7 +250,7 @@ class fancy_serializer
o->write_character('\"'); o->write_character('\"');
prim_serializer.dump_escaped(*o, i->first, ensure_ascii); prim_serializer.dump_escaped(*o, i->first, ensure_ascii);
o->write_characters("\": ", 2 + newline_len); o->write_characters("\": ", 2 + newline_len);
auto new_style = &stylizer.get_style(i->first); auto new_style = stylizer.get_new_style_or_active(i->first, active_style);
dump(i->second, ensure_ascii, depth + 1, new_style); dump(i->second, ensure_ascii, depth + 1, new_style);
o->write_characters("\n", newline_len); o->write_characters("\n", newline_len);

View File

@ -10128,10 +10128,12 @@ class basic_fancy_serializer_stylizer
return default_style; return default_style;
} }
const fancy_serializer_style& get_style(const string_t& j) const const fancy_serializer_style* get_new_style_or_active(
const string_t& j,
const fancy_serializer_style* active_style) const
{ {
auto iter = key_styles.find(j); auto iter = key_styles.find(j);
return iter == key_styles.end() ? default_style : iter->second; return iter == key_styles.end() ? active_style : &iter->second;
} }
fancy_serializer_style& get_or_insert_style(const string_t& j) fancy_serializer_style& get_or_insert_style(const string_t& j)
@ -10306,7 +10308,7 @@ class fancy_serializer
o->write_character('\"'); o->write_character('\"');
prim_serializer.dump_escaped(*o, i->first, ensure_ascii); prim_serializer.dump_escaped(*o, i->first, ensure_ascii);
o->write_characters("\": ", 2 + newline_len); o->write_characters("\": ", 2 + newline_len);
auto new_style = &stylizer.get_style(i->first); auto new_style = stylizer.get_new_style_or_active(i->first, active_style);
dump(i->second, ensure_ascii, depth + 1, new_style); dump(i->second, ensure_ascii, depth + 1, new_style);
o->write_characters(",\n", 1 + newline_len); o->write_characters(",\n", 1 + newline_len);
} }
@ -10318,7 +10320,7 @@ class fancy_serializer
o->write_character('\"'); o->write_character('\"');
prim_serializer.dump_escaped(*o, i->first, ensure_ascii); prim_serializer.dump_escaped(*o, i->first, ensure_ascii);
o->write_characters("\": ", 2 + newline_len); o->write_characters("\": ", 2 + newline_len);
auto new_style = &stylizer.get_style(i->first); auto new_style = stylizer.get_new_style_or_active(i->first, active_style);
dump(i->second, ensure_ascii, depth + 1, new_style); dump(i->second, ensure_ascii, depth + 1, new_style);
o->write_characters("\n", newline_len); o->write_characters("\n", newline_len);

View File

@ -256,6 +256,26 @@ TEST_CASE("serialization")
] ]
})")); })"));
} }
SECTION("changes propagate (unless overridden)")
{
fancy_serializer_stylizer stylizer;
stylizer.get_default_style().indent_step = 4;
stylizer.get_or_insert_style("one line").indent_step = 0;
auto str = fancy_to_string(
{
{
"one line", {{"still one line", {1, 2}}}
},
},
stylizer);
CHECK(str == dedent(R"(
{
"one line": {"still one line":[1,2]}
})"));
}
} }
SECTION("given width") SECTION("given width")