Skip to content

Commit

Permalink
Move pp_{bert, json, json_proplist} into main.rs
Browse files Browse the repository at this point in the history
  • Loading branch information
gnuvince committed Aug 28, 2018
1 parent ca21b93 commit 1b207b6
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 40 deletions.
41 changes: 5 additions & 36 deletions src/bertterm.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
extern crate itoa;

use std::fmt::{self, Write as FmtWrite};
use std::io::{self, Write as IoWrite};
use std::iter;

use num_bigint::{BigInt, Sign};
Expand Down Expand Up @@ -63,40 +62,6 @@ fn is_proplist_tuple(elems: &[BertTerm]) -> bool {
}
}


/// Outputs a vector of BertTerms to stdout.
pub fn pp_bert(terms: Vec<BertTerm>, indent_width: usize, terms_per_line: usize) {
let stdout = io::stdout();
let mut stdout = stdout.lock();
for t in terms {
let pp = PrettyPrinter::new(&t, indent_width, terms_per_line);
let _ = writeln!(stdout, "{}", pp);
}
}

/// Outputs a BertTerm as JSON to stdout.
pub fn pp_json(terms: Vec<BertTerm>, _: usize, _: usize) {
let stdout = io::stdout();
let mut stdout = stdout.lock();
for t in terms {
let pp = JsonPrettyPrinter { term: &t, transform_proplists: false };
let _ = writeln!(stdout, "{}", pp);
}
}


/// Outputs a BertTerm as JSON to stdout;
/// Erlang proplists are converted to JSON objects.
pub fn pp_json_proplist(terms: Vec<BertTerm>, _: usize, _: usize) {
let stdout = io::stdout();
let mut stdout = stdout.lock();
for t in terms {
let pp = JsonPrettyPrinter { term: &t, transform_proplists: true };
let _ = writeln!(stdout, "{}", pp);
}
}


pub struct PrettyPrinter<'a> {
term: &'a BertTerm,
indent_width: usize,
Expand All @@ -109,7 +74,6 @@ impl <'a> fmt::Display for PrettyPrinter<'a> {
}
}


impl <'a> PrettyPrinter<'a> {
/// Creates a pretty printer for `term` where sub-terms
/// are indented with a width of `indent_width` and a
Expand Down Expand Up @@ -243,6 +207,11 @@ pub struct JsonPrettyPrinter<'a> {
transform_proplists: bool
}

impl <'a> JsonPrettyPrinter<'a> {
pub fn new(term: &'a BertTerm, transform_proplists: bool) -> Self {
JsonPrettyPrinter { term, transform_proplists }
}
}

impl <'a> fmt::Display for JsonPrettyPrinter<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
Expand Down
39 changes: 35 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
extern crate ppbert;
#[macro_use] extern crate clap;

use std::io::{self, Read};
use std::io::{self, Read, Write};
use std::fs;
use std::process::exit;
use std::time::Instant;
Expand Down Expand Up @@ -87,16 +87,16 @@ fn main() {
let output_fn =
if matches.is_present("json") {
if transform_proplists {
bertterm::pp_json_proplist
pp_json_proplist
} else {
bertterm::pp_json
pp_json
}
} else {
if transform_proplists {
eprintln!("{}: warning: --transform-proplists is only valid with the --json flag",
PROG_NAME);
}
bertterm::pp_bert
pp_bert
};

let mut return_code = 0;
Expand Down Expand Up @@ -187,3 +187,34 @@ fn parse_disk_log(buf: Vec<u8>) -> Result<Vec<BertTerm>> {
let mut parser = parser::Parser::new(buf);
return parser.parse_disk_log();
}

/// Outputs a vector of BertTerms to stdout.
fn pp_bert(terms: Vec<BertTerm>, indent_width: usize, terms_per_line: usize) {
let stdout = io::stdout();
let mut stdout = stdout.lock();
for t in terms {
let pp = bertterm::PrettyPrinter::new(&t, indent_width, terms_per_line);
let _ = writeln!(stdout, "{}", pp);
}
}

/// Outputs a BertTerm as JSON to stdout.
fn pp_json(terms: Vec<BertTerm>, _: usize, _: usize) {
let stdout = io::stdout();
let mut stdout = stdout.lock();
for t in terms {
let pp = bertterm::JsonPrettyPrinter::new(&t, false);
let _ = writeln!(stdout, "{}", pp);
}
}

/// Outputs a BertTerm as JSON to stdout;
/// Erlang proplists are converted to JSON objects.
fn pp_json_proplist(terms: Vec<BertTerm>, _: usize, _: usize) {
let stdout = io::stdout();
let mut stdout = stdout.lock();
for t in terms {
let pp = bertterm::JsonPrettyPrinter::new(&t, true);
let _ = writeln!(stdout, "{}", pp);
}
}

0 comments on commit 1b207b6

Please sign in to comment.