use super::Writer;
use crate::ast::*;
use std::fmt::Write;
impl Writer {
pub(crate) fn write_comments(&mut self, output: &mut String, comments: &[Comment]) {
for comment in comments {
self.write_indent(output);
writeln!(output, "{}", comment.value).unwrap();
}
}
pub(crate) fn write_annotations(
&mut self,
output: &mut String,
annotations: &Option<Annotations>,
) {
if let Some(annotations) = annotations {
write!(output, " (").unwrap();
for (i, annotation) in annotations.members.iter().enumerate() {
if i > 0 {
write!(output, ", ").unwrap();
}
write!(
output,
"{} = {}",
annotation.name.value, annotation.value.value
)
.unwrap();
}
write!(output, ")").unwrap();
}
}
pub(crate) fn write_field(&mut self, output: &mut String, field: &Field) {
self.write_comments(output, &field.comments);
self.write_indent(output);
if let Some(id) = &field.field_id {
write!(output, "{}: ", id.value).unwrap();
}
match field.required_type.as_str() {
"required" => write!(output, "required ").unwrap(),
"optional" => write!(output, "optional ").unwrap(),
_ => {}
}
self.write_field_type(output, &field.field_type);
write!(output, " {}", field.name.value).unwrap();
if let Some(default) = &field.default_value {
write!(output, " = ").unwrap();
self.write_field_value(output, default);
}
self.write_annotations(output, &field.annotations);
writeln!(output, ",").unwrap();
}
pub(crate) fn write_param(&mut self, output: &mut String, field: &Field, is_first: bool) {
if !is_first {
write!(output, ", ").unwrap();
}
if let Some(id) = &field.field_id {
write!(output, "{}: ", id.value).unwrap();
}
self.write_field_type(output, &field.field_type);
write!(output, " {}", field.name.value).unwrap();
if let Some(default) = &field.default_value {
write!(output, " = ").unwrap();
self.write_field_value(output, default);
}
}
}