package model import ( "fmt" ) type Uses interface { fmt.Stringer isUses() } // UsesDockerImage represents `uses = "docker://"` type UsesDockerImage struct { Image string } // UsesRepository represents `uses = "/[/]@"` type UsesRepository struct { Repository string Path string Ref string } // UsesPath represents `uses = "./"` type UsesPath struct { Path string } // UsesInvalid represents any invalid `uses = ""` value type UsesInvalid struct { Raw string } func (u *UsesDockerImage) isUses() {} func (u *UsesRepository) isUses() {} func (u *UsesPath) isUses() {} func (u *UsesInvalid) isUses() {} func (u *UsesDockerImage) String() string { return fmt.Sprintf("docker://%s", u.Image) } func (u *UsesRepository) String() string { if u.Path == "" { return fmt.Sprintf("%s@%s", u.Repository, u.Ref) } return fmt.Sprintf("%s/%s@%s", u.Repository, u.Path, u.Ref) } func (u *UsesPath) String() string { return fmt.Sprintf("./%s", u.Path) } func (u *UsesInvalid) String() string { return u.Raw }