dockerfile_builder/
instruction.rs

1//! Dockerfile Instruction definitions
2//!
3//! See [`Instruction`]
4
5use dockerfile_builder_macros::InstructionInit;
6
7/// Dockerfile Instructions
8///
9/// There are 2 ways to build an Instruction:
10/// * from string literals, or
11/// * using the [`instruction_builder`] interface.
12///
13/// [`instruction_builder`]: crate::instruction_builder
14///
15/// ```
16/// use dockerfile_builder::instruction::FROM;
17/// use dockerfile_builder::instruction_builder::FromBuilder;
18///
19/// let from = FROM::from("cargo-chef AS chef");
20///
21/// let from_by_builder = FromBuilder::builder()
22///     .image("cargo-chef")
23///     .name("chef")
24///     .build()
25///     .unwrap();
26///
27/// assert_eq!(from, from_by_builder);
28/// ```
29//#[derive(Debug, Clone, Eq, PartialEq)]
30#[derive(Debug, InstructionInit, Clone, Eq, PartialEq)]
31pub enum Instruction {
32    FROM(FROM),
33    ENV(ENV),
34    RUN(RUN),
35    CMD(CMD),
36    LABEL(LABEL),
37    EXPOSE(EXPOSE),
38    ADD(ADD),
39    COPY(COPY),
40    ENTRYPOINT(ENTRYPOINT),
41    VOLUME(VOLUME),
42    USER(USER),
43    WORKDIR(WORKDIR),
44    ARG(ARG),
45    ONBUILD(ONBUILD),
46    STOPSIGNAL(STOPSIGNAL),
47    HEALTHCHECK(HEALTHCHECK),
48    SHELL(SHELL),
49    ANY(String),
50}
51
52impl<T> std::convert::From<T> for Instruction
53where
54    T: Into<String>,
55{
56    fn from(instruction: T) -> Self {
57        Instruction::ANY(instruction.into())
58    }
59}