@@ -16,18 +16,18 @@ String write(Element value, Json.Formatting formatting) {
1616 default -> 32 ;
1717 });
1818
19- this .write (builder , value , formatting );
19+ this .write (builder , value , formatting , 0 );
2020 return builder .toString ();
2121 }
2222
23- private void write (StringBuilder builder , Element value , Json .Formatting formatting ) {
23+ private void write (StringBuilder builder , Element value , Json .Formatting formatting , int depth ) {
2424 switch (value ) {
2525 case NullElement _ -> builder .append (NULL );
2626 case BooleanElement element -> builder .append (element .value () ? TRUE : FALSE );
2727 case NumberElement element -> this .writeNumber (builder , element .value ());
2828 case StringElement element -> this .writeString (builder , element .value ());
29- case ArrayElement element -> this .writeArray (builder , element , formatting );
30- case ObjectElement element -> this .writeObject (builder , element , formatting );
29+ case ArrayElement element -> this .writeArray (builder , element , formatting , depth );
30+ case ObjectElement element -> this .writeObject (builder , element , formatting , depth );
3131 }
3232 }
3333
@@ -89,7 +89,16 @@ private void writeString(StringBuilder builder, String string) {
8989 builder .append (QUOTE );
9090 }
9191
92- private void writeArray (StringBuilder builder , ArrayElement element , Json .Formatting formatting ) {
92+ private void writeIndentation (StringBuilder builder , Json .Formatting formatting , int depth ) {
93+ if (formatting .indentation ().isEmpty ()) {
94+ return ;
95+ }
96+
97+ builder .append (formatting .newLine ());
98+ builder .append (formatting .indentation ().repeat (depth ));
99+ }
100+
101+ private void writeArray (StringBuilder builder , ArrayElement element , Json .Formatting formatting , int depth ) {
93102 builder .append (BEGIN_ARRAY );
94103 var firstElement = true ;
95104
@@ -98,14 +107,19 @@ private void writeArray(StringBuilder builder, ArrayElement element, Json.Format
98107 builder .append (formatting .comma ());
99108 }
100109
101- this .write (builder , value , formatting );
110+ this .writeIndentation (builder , formatting , depth + 1 );
111+ this .write (builder , value , formatting , depth + 1 );
102112 firstElement = false ;
103113 }
104114
115+ if (!firstElement ) {
116+ this .writeIndentation (builder , formatting , depth );
117+ }
118+
105119 builder .append (END_ARRAY );
106120 }
107121
108- private void writeObject (StringBuilder builder , ObjectElement element , Json .Formatting formatting ) {
122+ private void writeObject (StringBuilder builder , ObjectElement element , Json .Formatting formatting , int depth ) {
109123 builder .append (BEGIN_OBJECT );
110124 var firstElement = new boolean [] { true };
111125
@@ -116,11 +130,16 @@ private void writeObject(StringBuilder builder, ObjectElement element, Json.Form
116130 builder .append (formatting .comma ());
117131 }
118132
133+ this .writeIndentation (builder , formatting , depth + 1 );
119134 this .writeString (builder , key );
120135 builder .append (formatting .colon ());
121- this .write (builder , value , formatting );
136+ this .write (builder , value , formatting , depth + 1 );
122137 });
123138
139+ if (!firstElement [0 ]) {
140+ writeIndent (builder , formatting , depth );
141+ }
142+
124143 builder .append (END_OBJECT );
125144 }
126145}
0 commit comments