use std::{
borrow::Cow,
convert,
fmt,
};
pub struct Add(Cow<'static, str>);
impl Add {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Add(val.into())
}
}
impl fmt::Display for Add {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ADD {}\n", &self.0)
}
}
pub struct Arg(Cow<'static, str>);
impl Arg {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Arg(val.into())
}
}
impl fmt::Display for Arg {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ARG {}\n", &self.0)
}
}
pub struct Cmd(Cow<'static, str>);
impl Cmd {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Cmd(val.into())
}
}
impl fmt::Display for Cmd {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "CMD {}\n", &self.0)
}
}
pub struct Copy(Cow<'static, str>);
impl Copy {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Copy(val.into())
}
}
impl fmt::Display for Copy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "COPY {}\n", &self.0)
}
}
pub struct Directive(Cow<'static, str>);
impl Directive {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Directive(val.into())
}
}
impl fmt::Display for Directive {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "# {}\n", &self.0)
}
}
pub struct Entrypoint(Cow<'static, str>);
impl Entrypoint {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Entrypoint(val.into())
}
}
impl fmt::Display for Entrypoint {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ENTRYPOINT {}\n", &self.0)
}
}
pub struct Env(Cow<'static, str>);
impl Env {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Env(val.into())
}
}
impl fmt::Display for Env {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ENV {}\n", &self.0)
}
}
pub struct Expose(Cow<'static, str>);
impl Expose {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Expose(val.into())
}
}
impl fmt::Display for Expose {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "EXPOSE {}\n", &self.0)
}
}
pub struct From(Cow<'static, str>);
impl From {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
From(val.into())
}
}
impl fmt::Display for From {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "FROM {}\n", &self.0)
}
}
pub struct Healthcheck(Cow<'static, str>);
impl Healthcheck {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Healthcheck(val.into())
}
}
impl fmt::Display for Healthcheck {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "HEALTHCHECK {}\n", &self.0)
}
}
pub struct Label(Cow<'static, str>);
impl Label {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Label(val.into())
}
}
impl fmt::Display for Label {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "LABEL {}\n", &self.0)
}
}
pub struct Onbuild(Cow<'static, str>);
impl Onbuild {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Onbuild(val.into())
}
}
impl fmt::Display for Onbuild {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ONBUILD {}\n", &self.0)
}
}
pub struct Run(Cow<'static, str>);
impl Run {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Run(val.into())
}
}
impl fmt::Display for Run {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "RUN {}\n", &self.0)
}
}
pub struct Shell(Cow<'static, str>);
impl Shell {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Shell(val.into())
}
}
impl fmt::Display for Shell {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "SHELL {}\n", &self.0)
}
}
pub struct Stopsignal(Cow<'static, str>);
impl Stopsignal {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Stopsignal(val.into())
}
}
impl fmt::Display for Stopsignal {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "STOPSIGNAL {}\n", &self.0)
}
}
pub struct User(Cow<'static, str>);
impl User {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
User(val.into())
}
}
impl fmt::Display for User {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "USER {}\n", &self.0)
}
}
pub struct Volume(Cow<'static, str>);
impl Volume {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Volume(val.into())
}
}
impl fmt::Display for Volume {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "VOLUME {}\n", &self.0)
}
}
pub struct Workdir(Cow<'static, str>);
impl Workdir {
pub fn new<T: Into<Cow<'static, str>>>(val: T) -> Self {
Workdir(val.into())
}
}
impl fmt::Display for Workdir {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "WORKDIR {}\n", &self.0)
}
}
pub enum Instruction {
Add(Add),
Arg(Arg),
Cmd(Cmd),
Copy(Copy),
Directive(Directive),
Entrypoint(Entrypoint),
Env(Env),
Expose(Expose),
From(From),
Healthcheck(Healthcheck),
Label(Label),
Onbuild(Onbuild),
Run(Run),
Shell(Shell),
Stopsignal(Stopsignal),
User(User),
Volume(Volume),
Workdir(Workdir),
}
impl fmt::Display for Instruction {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Instruction::Add(inst) => write!(f, "{}", inst),
Instruction::Arg(inst) => write!(f, "{}", inst),
Instruction::Cmd(inst) => write!(f, "{}", inst),
Instruction::Copy(inst) => write!(f, "{}", inst),
Instruction::Directive(inst) => write!(f, "{}", inst),
Instruction::Entrypoint(inst) => write!(f, "{}", inst),
Instruction::Env(inst) => write!(f, "{}", inst),
Instruction::Expose(inst) => write!(f, "{}", inst),
Instruction::From(inst) => write!(f, "{}", inst),
Instruction::Healthcheck(inst) => write!(f, "{}", inst),
Instruction::Label(inst) => write!(f, "{}", inst),
Instruction::Onbuild(inst) => write!(f, "{}", inst),
Instruction::Run(inst) => write!(f, "{}", inst),
Instruction::Shell(inst) => write!(f, "{}", inst),
Instruction::Stopsignal(inst) => write!(f, "{}", inst),
Instruction::User(inst) => write!(f, "{}", inst),
Instruction::Volume(inst) => write!(f, "{}", inst),
Instruction::Workdir(inst) => write!(f, "{}", inst),
}
}
}
impl convert::From<Add> for Instruction {
fn from(inst: Add) -> Self {
Instruction::Add(inst)
}
}
impl convert::From<Arg> for Instruction {
fn from(inst: Arg) -> Self {
Instruction::Arg(inst)
}
}
impl convert::From<Cmd> for Instruction {
fn from(inst: Cmd) -> Self {
Instruction::Cmd(inst)
}
}
impl convert::From<Copy> for Instruction {
fn from(inst: Copy) -> Self {
Instruction::Copy(inst)
}
}
impl convert::From<Directive> for Instruction {
fn from(inst: Directive) -> Self {
Instruction::Directive(inst)
}
}
impl convert::From<Entrypoint> for Instruction {
fn from(inst: Entrypoint) -> Self {
Instruction::Entrypoint(inst)
}
}
impl convert::From<Env> for Instruction {
fn from(inst: Env) -> Self {
Instruction::Env(inst)
}
}
impl convert::From<Expose> for Instruction {
fn from(inst: Expose) -> Self {
Instruction::Expose(inst)
}
}
impl convert::From<From> for Instruction {
fn from(inst: From) -> Self {
Instruction::From(inst)
}
}
impl convert::From<Healthcheck> for Instruction {
fn from(inst: Healthcheck) -> Self {
Instruction::Healthcheck(inst)
}
}
impl convert::From<Label> for Instruction {
fn from(inst: Label) -> Self {
Instruction::Label(inst)
}
}
impl convert::From<Onbuild> for Instruction {
fn from(inst: Onbuild) -> Self {
Instruction::Onbuild(inst)
}
}
impl convert::From<Run> for Instruction {
fn from(inst: Run) -> Self {
Instruction::Run(inst)
}
}
impl convert::From<Shell> for Instruction {
fn from(inst: Shell) -> Self {
Instruction::Shell(inst)
}
}
impl convert::From<Stopsignal> for Instruction {
fn from(inst: Stopsignal) -> Self {
Instruction::Stopsignal(inst)
}
}
impl convert::From<User> for Instruction {
fn from(inst: User) -> Self {
Instruction::User(inst)
}
}
impl convert::From<Volume> for Instruction {
fn from(inst: Volume) -> Self {
Instruction::Volume(inst)
}
}
impl convert::From<Workdir> for Instruction {
fn from(inst: Workdir) -> Self {
Instruction::Workdir(inst)
}
}