#![cfg_attr(
not(feature = "view"),
doc = "",
doc = "[`Script`]: crate#cargo-features",
doc = "[`view`]: crate#cargo-features"
)]
#[cfg(feature = "view")]
use serde::Serialize;
#[cfg(feature = "view")]
use crate::color::ColorMode;
#[cfg(feature = "view")]
use crate::document::Document;
#[cfg(feature = "view")]
use crate::format::OutputFormat;
#[cfg(feature = "view")]
use crate::view::{Present, View};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, clap::ValueEnum)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
#[cfg_attr(feature = "json", serde(rename_all = "lowercase"))]
pub enum Shell {
Bash,
Zsh,
Fish,
}
#[cfg(feature = "view")]
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Script {
pub shell: Shell,
pub text: String,
}
#[cfg(feature = "view")]
impl Present for Script {
fn present(&self) -> Document {
Document::new().verbatim(self.text.clone())
}
}
#[cfg_attr(
feature = "app",
doc = "",
doc = "[`App::view`]: crate::app::App::view"
)]
#[cfg_attr(
not(feature = "app"),
doc = "",
doc = "[`App::view`]: crate#cargo-features"
)]
#[cfg(feature = "view")]
#[must_use]
pub const fn view(format: OutputFormat) -> View {
View::new(format, ColorMode::Never)
}