use std::borrow::Borrow;
use std::fmt::Debug;
#[cfg(doc)]
use std::process::Child;
#[cfg(doc)]
use std::process::Command;
#[cfg(doc)]
use crate::ChildExt;
use crate::CommandDisplay;
#[cfg(doc)]
use crate::OutputContext;
pub struct ChildContext<C> {
child: C,
command: Box<dyn CommandDisplay + Send + Sync>,
}
impl<C> ChildContext<C> {
pub fn new(child: C, command: Box<dyn CommandDisplay + Send + Sync>) -> Self {
Self { child, command }
}
pub fn into_child(self) -> C {
self.child
}
pub fn child(&self) -> &C {
&self.child
}
pub fn child_mut(&mut self) -> &mut C {
&mut self.child
}
pub fn command(&self) -> &(dyn CommandDisplay + Send + Sync + 'static) {
self.command.borrow()
}
#[expect(clippy::borrowed_box)]
pub fn command_boxed(&self) -> &Box<dyn CommandDisplay + Send + Sync> {
&self.command
}
pub fn into_child_and_command(self) -> (C, Box<dyn CommandDisplay + Send + Sync>) {
(self.child, self.command)
}
}
impl<C> Debug for ChildContext<C>
where
C: Debug,
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ChildContext")
.field("child", &self.child)
.field("command", &self.command.to_string())
.finish()
}
}