diff --git a/gfx/wr/webrender/src/print_tree.rs b/gfx/wr/webrender/src/print_tree.rs index 0948d19abba0..ee1deee44f8e 100644 --- a/gfx/wr/webrender/src/print_tree.rs +++ b/gfx/wr/webrender/src/print_tree.rs @@ -2,15 +2,23 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use std::io::{stdout, Stdout, Write}; + /// A struct that makes it easier to print out a pretty tree of data, which /// can be visually scanned more easily. -pub struct PrintTree { +pub struct PrintTree +where + W: Write +{ /// The current level of recursion. level: u32, /// An item which is queued up, so that we can determine if we need /// a mid-tree prefix or a branch ending prefix. queued_item: Option, + + /// The sink to print to. + sink: W, } /// A trait that makes it easy to describe a pretty tree of data, @@ -22,37 +30,50 @@ pub trait PrintTreePrinter { fn add_item(&mut self, text: String); } -impl PrintTree { - pub fn new(title: &str) -> PrintTree { - println!("\u{250c} {}", title); +impl PrintTree { + pub fn new(title: &str) -> Self { + PrintTree::new_with_sink(title, stdout()) + } +} + +impl PrintTree +where + W: Write +{ + pub fn new_with_sink(title: &str, mut sink: W) -> Self { + writeln!(sink, "\u{250c} {}", title).unwrap(); PrintTree { level: 1, queued_item: None, + sink, } } - fn print_level_prefix(&self) { + fn print_level_prefix(&mut self) { for _ in 0 .. self.level { - print!("\u{2502} "); + write!(self.sink, "\u{2502} ").unwrap(); } } fn flush_queued_item(&mut self, prefix: &str) { if let Some(queued_item) = self.queued_item.take() { self.print_level_prefix(); - println!("{} {}", prefix, queued_item); + writeln!(self.sink, "{} {}", prefix, queued_item).unwrap(); } } } // The default `println!` based printer -impl PrintTreePrinter for PrintTree { +impl PrintTreePrinter for PrintTree +where + W: Write +{ /// Descend one level in the tree with the given title. fn new_level(&mut self, title: String) { self.flush_queued_item("\u{251C}\u{2500}"); self.print_level_prefix(); - println!("\u{251C}\u{2500} {}", title); + writeln!(self.sink, "\u{251C}\u{2500} {}", title).unwrap(); self.level = self.level + 1; } @@ -70,7 +91,10 @@ impl PrintTreePrinter for PrintTree { } } -impl Drop for PrintTree { +impl Drop for PrintTree +where + W: Write +{ fn drop(&mut self) { self.flush_queued_item("\u{9492}\u{9472}"); }