use panproto_gat::LayoutPolicySpec;
use crate::emit_pretty::FormatPolicy;
pub type LayoutPolicy = FormatPolicy;
#[must_use]
pub fn policy_to_spec(policy: &LayoutPolicy) -> LayoutPolicySpec {
LayoutPolicySpec {
indent_width: policy.indent_width,
separator: policy.separator.clone(),
newline: policy.newline.clone(),
line_break_after: policy.line_break_after.clone(),
indent_open: policy.indent_open.clone(),
indent_close: policy.indent_close.clone(),
}
}
#[must_use]
pub fn policy_from_spec(spec: &LayoutPolicySpec) -> LayoutPolicy {
FormatPolicy {
indent_width: spec.indent_width,
separator: spec.separator.clone(),
newline: spec.newline.clone(),
line_break_after: spec.line_break_after.clone(),
indent_open: spec.indent_open.clone(),
indent_close: spec.indent_close.clone(),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn round_trip_through_spec() {
let p = LayoutPolicy::default();
let q = policy_from_spec(&policy_to_spec(&p));
assert_eq!(p.indent_width, q.indent_width);
assert_eq!(p.separator, q.separator);
assert_eq!(p.newline, q.newline);
assert_eq!(p.line_break_after, q.line_break_after);
}
#[test]
fn non_default_separator_round_trips() {
let p = LayoutPolicy {
separator: "\t".to_owned(),
newline: "\r\n".to_owned(),
indent_width: 4,
..LayoutPolicy::default()
};
let q = policy_from_spec(&policy_to_spec(&p));
assert_eq!(q.separator, "\t");
assert_eq!(q.newline, "\r\n");
assert_eq!(q.indent_width, 4);
}
}