sack works
[pspp] / rust / tests / sack.rs
index 4f6e9680a069dfd7ff74e59430d73dac1c616189..abb51abe2a2589e3038db0a7733fc3666a1fe12e 100644 (file)
@@ -1,5 +1,4 @@
 use std::fs::read_to_string;
-use std::io::{stdout, IsTerminal, Write};
 use std::path::PathBuf;
 
 use anyhow::{anyhow, Result};
@@ -61,15 +60,14 @@ struct Args {
     /// Input file.
     #[arg(required = true, name = "input")]
     input_file_name: PathBuf,
+
+    /// Output file.
+    #[arg(required = true, name = "output")]
+    output_file_name: PathBuf,
 }
 
 fn main() -> Result<()> {
-    let Args { be, le, input_file_name } = Args::parse();
-    if stdout().is_terminal() {
-        return Err(anyhow!(
-            "not writing binary data to a terminal; redirect to a file"
-        ));
-    }
+    let Args { be, le, input_file_name, output_file_name } = Args::parse();
     let endian = match (be, le) {
         (false, false) | (true, false) => Endian::Big,
         (false, true) => Endian::Little,
@@ -78,6 +76,6 @@ fn main() -> Result<()> {
     let input = read_to_string(&input_file_name)?;
     let input_file_name = input_file_name.to_string_lossy();
     let output = sack(&input, Some(&input_file_name), endian)?;
-    stdout().write_all(&output)?;
+    std::fs::write(&output_file_name, &output)?;
     Ok(())
 }