use std::io::prelude::*;
use std::io::{Error, ErrorKind, Result};
use std::process::{Command, Stdio};
pub fn render_svg(svg: &[u8]) -> Result<Vec<u8>> {
render_svg_with_rsvg_convert(svg)
}
fn render_svg_with_rsvg_convert(svg: &[u8]) -> Result<Vec<u8>> {
let mut process = Command::new("rsvg-convert")
.arg("--dpi-x=72")
.arg("--dpi-y=72")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()?;
process
.stdin
.as_mut()
.expect("Forgot to pipe stdin?")
.write_all(svg)?;
let output = process.wait_with_output()?;
if output.status.success() {
Ok(output.stdout)
} else {
Err(Error::new(
ErrorKind::Other,
format!(
"rsvg-convert failed with status {}: {}",
output.status,
String::from_utf8_lossy(&output.stderr)
),
))
}
}