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}