Skip to content

Commit 395dcf5

Browse files
committed
styled string formatting
1 parent 83e8f2b commit 395dcf5

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/parser.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,26 +57,26 @@ pub struct StyleConfiguration {
5757
pub(crate) indent: Option<usize>,
5858
pub(crate) item_separator: String,
5959
pub(crate) key_separator: String,
60-
pub(crate) current_indent: usize,
60+
pub(crate) current_indent: String,
6161
pub(crate) trailing_comma: TrailingComma
6262
}
6363

6464
#[allow(dead_code)]
6565
impl StyleConfiguration {
6666
pub fn new(indent: Option<usize>, item_separator: &str, key_separator: &str, trailing_comma: TrailingComma) -> Self {
67-
StyleConfiguration{indent: indent, item_separator: item_separator.to_string(), key_separator: key_separator.to_string(), current_indent: 0, trailing_comma: trailing_comma}
67+
StyleConfiguration{indent: indent, item_separator: item_separator.to_string(), key_separator: key_separator.to_string(), current_indent: String::with_capacity(64), trailing_comma: trailing_comma}
6868
}
6969

7070
pub fn with_indent(indent: usize, trailing_comma: TrailingComma) -> Self {
71-
StyleConfiguration{indent: Some(indent), item_separator: ",".to_string(), key_separator: ": ".to_string(), trailing_comma, current_indent: 0}
71+
StyleConfiguration{indent: Some(indent), item_separator: ",".to_string(), key_separator: ": ".to_string(), trailing_comma, current_indent: String::with_capacity(64)}
7272
}
7373

7474
pub fn with_separators(item_separator: &str, key_separator: &str, trailing_comma: TrailingComma) -> Self {
75-
StyleConfiguration{indent: Some(0), key_separator: key_separator.to_string(), trailing_comma, item_separator: item_separator.to_string(), current_indent: 0}
75+
StyleConfiguration{indent: Some(0), key_separator: key_separator.to_string(), trailing_comma, item_separator: item_separator.to_string(), current_indent: String::with_capacity(64)}
7676
}
7777

7878
pub fn default() -> Self {
79-
StyleConfiguration{indent: None, item_separator: ", ".to_string(), key_separator: ": ".to_string(), current_indent: 0, trailing_comma: TrailingComma::NONE}
79+
StyleConfiguration{indent: None, item_separator: ", ".to_string(), key_separator: ": ".to_string(), current_indent: String::with_capacity(64), trailing_comma: TrailingComma::NONE}
8080

8181
}
8282
}
@@ -123,7 +123,10 @@ impl<'input> JSONValue<'input> {
123123
ret = String::from("{");
124124
}
125125
Some(ident) => {
126-
style.current_indent += ident;
126+
style.current_indent.reserve(ident);
127+
for _ in 0 .. ident {
128+
style.current_indent.push(' ');
129+
}
127130
ret = format!("{{\n{}", style.current_indent);
128131
}
129132
}
@@ -151,7 +154,7 @@ impl<'input> JSONValue<'input> {
151154
ret.push_str("}");
152155
}
153156
Some(ident) => {
154-
style.current_indent -= ident;
157+
style.current_indent.truncate(style.current_indent.len() - ident);
155158
ret.push_str(format!("\n{}}}", style.current_indent).as_str());
156159
}
157160
}
@@ -165,7 +168,10 @@ impl<'input> JSONValue<'input> {
165168
ret = String::from("[");
166169
}
167170
Some(ident) => {
168-
style.current_indent += ident;
171+
style.current_indent.reserve(ident);
172+
for _ in 0 .. ident {
173+
style.current_indent.push(' ');
174+
}
169175
ret = format!("{{\n{}", style.current_indent);
170176
}
171177
}
@@ -193,7 +199,7 @@ impl<'input> JSONValue<'input> {
193199
ret.push_str("]");
194200
}
195201
Some(ident) => {
196-
style.current_indent -= ident;
202+
style.current_indent.truncate(style.current_indent.len() - ident);
197203
ret.push_str(format!("\n{}}}", style.current_indent).as_str());
198204
}
199205
}

0 commit comments

Comments
 (0)