You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

65 lines
2.2 KiB

use super::*;
use std::marker::PhantomData;
#[derive(Debug)]
pub(crate) struct OutputContains<S: Shell, Output: Expression<S>> {
_s: PhantomData<S>,
output_of: Output,
contains: &'static str,
}
impl<S: Shell, Output: Expression<S>> OutputContains<S, Output> {
pub(crate) fn new(output_of: Output, contains: &'static str) -> Self {
Self {
_s: PhantomData,
output_of,
contains,
}
}
}
impl<E: Expression<Zsh>> Expression<Zsh> for OutputContains<Zsh, E> {
fn write_shell(&self, writer: &mut impl std::fmt::Write) -> std::fmt::Result {
self.output_of.write_shell(writer)?;
write!(writer, " | grep {}", Zsh::shell_escape(self.contains))
}
}
impl<E: Expression<Bash>> Expression<Bash> for OutputContains<Bash, E> {
fn write_shell(&self, writer: &mut impl std::fmt::Write) -> std::fmt::Result {
self.output_of.write_shell(writer)?;
write!(writer, " | grep {}", Bash::shell_escape(self.contains))
}
}
impl<E: Expression<Fish>> Expression<Fish> for OutputContains<Fish, E> {
fn write_shell(&self, writer: &mut impl std::fmt::Write) -> std::fmt::Result {
self.output_of.write_shell(writer)?;
write!(writer, " | grep {}", Fish::shell_escape(self.contains))
}
}
impl<E: Expression<PowerShell>> Expression<PowerShell> for OutputContains<PowerShell, E> {
fn write_shell(&self, writer: &mut impl std::fmt::Write) -> std::fmt::Result {
// $($__out__ = (fnm ls | findstr 6.11.3); if ($LASTEXITCODE -ne 0) { "WELP" } else { $__out__ })
write!(writer, "$(")?;
{
write!(writer, "$__out__ = $(")?;
{
self.output_of.write_shell(writer)?;
write!(
writer,
" | Select-String {}",
PowerShell::shell_escape(self.contains)
)?;
}
write!(writer, "); ")?;
write!(writer, "echo $__out__; ")?;
write!(writer, "if ($__out__ -eq $null)")?;
write!(writer, "{{ exit 1 }} ")?;
write!(writer, "else {{ $__out__ }}")?;
}
write!(writer, ")")?;
Ok(())
}
}