summaryrefslogtreecommitdiffstats
path: root/src/parse.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-02-28 14:59:51 -0500
committerJesse Luehrs <doy@tozt.net>2022-02-28 14:59:51 -0500
commitb9d919152cfa12bf74d4ffc5d0b1528e3b64857a (patch)
tree5d05e0e3cf004eb36f1dd80137e4252af5505a78 /src/parse.rs
parent02ce9453e9c7972d420eb0e1e2d7e99dc77c97f1 (diff)
downloadnbsh-b9d919152cfa12bf74d4ffc5d0b1528e3b64857a.tar.gz
nbsh-b9d919152cfa12bf74d4ffc5d0b1528e3b64857a.zip
reorganize
Diffstat (limited to 'src/parse.rs')
-rw-r--r--src/parse.rs162
1 files changed, 0 insertions, 162 deletions
diff --git a/src/parse.rs b/src/parse.rs
deleted file mode 100644
index cc6d92b..0000000
--- a/src/parse.rs
+++ /dev/null
@@ -1,162 +0,0 @@
-pub mod ast;
-
-#[derive(Debug, Eq, PartialEq)]
-pub struct Pipeline {
- exes: Vec<Exe>,
-}
-
-impl Pipeline {
- pub fn into_exes(self) -> impl Iterator<Item = Exe> {
- self.exes.into_iter()
- }
-}
-
-#[derive(Debug, Eq, PartialEq)]
-pub struct Exe {
- exe: std::path::PathBuf,
- args: Vec<String>,
- redirects: Vec<Redirect>,
-}
-
-impl Exe {
- pub fn exe(&self) -> &std::path::Path {
- &self.exe
- }
-
- pub fn args(&self) -> &[String] {
- &self.args
- }
-
- pub fn redirects(&self) -> &[Redirect] {
- &self.redirects
- }
-
- pub fn shift(&mut self) {
- self.exe = std::path::PathBuf::from(self.args.remove(0));
- }
-}
-
-#[derive(Debug, Clone, Eq, PartialEq)]
-pub struct Redirect {
- pub from: std::os::unix::io::RawFd,
- pub to: RedirectTarget,
- pub dir: Direction,
-}
-
-#[derive(Debug, Clone, Eq, PartialEq)]
-pub enum RedirectTarget {
- Fd(std::os::unix::io::RawFd),
- File(std::path::PathBuf),
-}
-
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub enum Direction {
- In,
- Out,
- Append,
-}
-
-impl Direction {
- pub fn open(
- self,
- path: &std::path::Path,
- ) -> nix::Result<std::os::unix::io::RawFd> {
- use nix::fcntl::OFlag;
- use nix::sys::stat::Mode;
- Ok(match self {
- Self::In => nix::fcntl::open(
- path,
- OFlag::O_NOCTTY | OFlag::O_RDONLY,
- Mode::empty(),
- )?,
- Self::Out => nix::fcntl::open(
- path,
- OFlag::O_CREAT
- | OFlag::O_NOCTTY
- | OFlag::O_WRONLY
- | OFlag::O_TRUNC,
- Mode::S_IRUSR
- | Mode::S_IWUSR
- | Mode::S_IRGRP
- | Mode::S_IWGRP
- | Mode::S_IROTH
- | Mode::S_IWOTH,
- )?,
- Self::Append => nix::fcntl::open(
- path,
- OFlag::O_APPEND
- | OFlag::O_CREAT
- | OFlag::O_NOCTTY
- | OFlag::O_WRONLY,
- Mode::S_IRUSR
- | Mode::S_IWUSR
- | Mode::S_IRGRP
- | Mode::S_IWGRP
- | Mode::S_IROTH
- | Mode::S_IWOTH,
- )?,
- })
- }
-}
-
-#[derive(Debug, Eq, PartialEq)]
-pub struct Error {
- input: String,
- e: pest::error::Error<ast::Rule>,
-}
-
-impl Error {
- fn new(input: &str, e: pest::error::Error<ast::Rule>) -> Self {
- Self {
- input: input.to_string(),
- e,
- }
- }
-}
-
-impl std::fmt::Display for Error {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match &self.e.variant {
- pest::error::ErrorVariant::ParsingError {
- positives,
- negatives,
- } => {
- if !positives.is_empty() {
- write!(f, "expected {:?}", positives[0])?;
- for rule in &positives[1..] {
- write!(f, ", {:?}", rule)?;
- }
- if !negatives.is_empty() {
- write!(f, "; ")?;
- }
- }
- if !negatives.is_empty() {
- write!(f, "unexpected {:?}", negatives[0])?;
- for rule in &negatives[1..] {
- write!(f, ", {:?}", rule)?;
- }
- }
- writeln!(f)?;
- writeln!(f, "{}", self.input)?;
- match &self.e.location {
- pest::error::InputLocation::Pos(i) => {
- write!(f, "{}^", " ".repeat(*i))?;
- }
- pest::error::InputLocation::Span((i, j)) => {
- write!(f, "{}{}", " ".repeat(*i), "^".repeat(j - i))?;
- }
- }
- }
- pest::error::ErrorVariant::CustomError { message } => {
- write!(f, "{}", message)?;
- }
- }
- Ok(())
- }
-}
-
-impl std::error::Error for Error {
- fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
- Some(&self.e)
- }
-}