Files
voidpin/crates/voidpin/src/copy.rs

49 lines
1.1 KiB
Rust

use std::process::Stdio;
use anyhow::Context;
use tokio::io::AsyncWriteExt;
use crate::state::State;
#[derive(Default)]
pub struct LocalCopier {}
impl LocalCopier {
pub fn new() -> Self {
Self {}
}
pub async fn copy(&self, input: &[u8]) -> anyhow::Result<()> {
// FIXME: hardcode for macos
let mut copy_process = tokio::process::Command::new("pbcopy")
.stdin(Stdio::piped())
.spawn()?;
if let Some(mut stdin_handle) = copy_process.stdin.take() {
stdin_handle
.write_all(input)
.await
.context("failed to write input to copy process")?;
stdin_handle
.flush()
.await
.context("failed to flush to program")?;
}
let status = copy_process.wait().await?;
tracing::info!("copy process ended with status: {:?}", status);
Ok(())
}
}
pub trait LocalCopierState {
fn local_copier(&self) -> LocalCopier;
}
impl LocalCopierState for State {
fn local_copier(&self) -> LocalCopier {
LocalCopier::new()
}
}