Skip to main content

oxilean_codegen/bash_backend/
bashexpr_traits.rs

1//! # BashExpr - Trait Implementations
2//!
3//! This module contains trait implementations for `BashExpr`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::types::BashExpr;
12use std::fmt;
13
14impl fmt::Display for BashExpr {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            BashExpr::Var(v) => write!(f, "{}", v),
18            BashExpr::Lit(s) => write!(f, "'{}'", s.replace('\'', "'\\''")),
19            BashExpr::DQuoted(s) => write!(f, "\"{}\"", s),
20            BashExpr::CmdSubst(cmd) => write!(f, "$({})", cmd),
21            BashExpr::ArithExpr(expr) => write!(f, "$(({}))", expr),
22            BashExpr::ProcSubst { is_input, cmd } => {
23                if *is_input {
24                    write!(f, "<({})", cmd)
25                } else {
26                    write!(f, ">({})", cmd)
27                }
28            }
29            BashExpr::ArrayElem(name, idx) => write!(f, "${{{}[{}]}}", name, idx),
30            BashExpr::ArrayLen(name) => write!(f, "${{#{}[@]}}", name),
31            BashExpr::ArrayAll(name) => write!(f, "\"${{{}[@]}}\"", name),
32            BashExpr::AssocElem(name, key) => write!(f, "${{{}[{}]}}", name, key),
33            BashExpr::Default(var, default) => write!(f, "${{{}:-{}}}", var, default),
34            BashExpr::AssignDefault(var, default) => {
35                write!(f, "${{{}:={}}}", var, default)
36            }
37            BashExpr::Substring(var, off, None) => write!(f, "${{{}:{}}}", var, off),
38            BashExpr::Substring(var, off, Some(len)) => {
39                write!(f, "${{{}:{}:{}}}", var, off, len)
40            }
41            BashExpr::StringLen(var) => write!(f, "${{#{}}}", var),
42            BashExpr::StripPrefix(var, pat) => write!(f, "${{{}#{}}}", var, pat),
43            BashExpr::StripSuffix(var, pat) => write!(f, "${{{}%{}}}", var, pat),
44            BashExpr::UpperCase(var) => write!(f, "${{{}^^}}", var),
45            BashExpr::LowerCase(var) => write!(f, "${{{},,}}", var),
46            BashExpr::LastStatus => write!(f, "$?"),
47            BashExpr::ShellPid => write!(f, "$$"),
48            BashExpr::ScriptName => write!(f, "$0"),
49            BashExpr::Positional(n) => write!(f, "${}", n),
50            BashExpr::AllArgs => write!(f, "\"$@\""),
51            BashExpr::ArgCount => write!(f, "$#"),
52            BashExpr::Concat(a, b) => write!(f, "{}{}", a, b),
53        }
54    }
55}