dockerfile_parser/
error.rs

1// (C) Copyright 2019-2020 Hewlett Packard Enterprise Development LP
2
3use pest::iterators::Pair;
4use snafu::Snafu;
5
6use crate::parser::*;
7
8/// A Dockerfile parsing error.
9#[derive(Debug, Snafu)]
10#[snafu(visibility(pub(crate)))]
11pub enum Error {
12  #[snafu(display(
13    "could not parse Dockerfile: {}", source
14  ))]
15  ParseError {
16    source: pest::error::Error<Rule>
17  },
18
19  #[snafu(display(
20    "unable to parse Dockerfile: {}", message
21  ))]
22  GenericParseError {
23    message: String
24  },
25
26  #[snafu(display(
27    "error unescaping string: {:?}", source
28  ))]
29  UnescapeError {
30    source: enquote::Error
31  },
32
33  #[snafu(display(
34    "unable to parse Dockerfile"
35  ))]
36  UnknownParseError,
37
38  #[snafu(display(
39    "could not read Dockerfile: {}", source
40  ))]
41  ReadError {
42    source: std::io::Error
43  },
44
45  #[snafu(display(
46    "could not convert instruction '{:?}' to desired type '{}'", from, to
47  ))]
48  ConversionError {
49    from: String,
50    to: String
51  }
52}
53
54/// A Dockerfile parsing Result.
55pub type Result<T, E = Error> = std::result::Result<T, E>;
56
57/// Helper to create an unexpected token error.
58pub(crate) fn unexpected_token(record: Pair<Rule>) -> Error {
59  Error::GenericParseError {
60    message: format!("unexpected token {:?}", record.as_rule())
61  }
62}