package main import "fmt" type Version interface { String() string } type VersionProvider interface { GetVersion() (Version, error) } func GetProvider(p string, args map[string]interface{}) (VersionProvider, error) { switch p { case "github": drafts, _ := args["drafts"].(bool) prereleases, _ := args["prereleases"].(bool) return &GitHubVersionProvider{ Repository: args["repository"].(string), IncludeDrafts: drafts, IncludePrereleases: prereleases, }, nil } return nil, fmt.Errorf("unknown provider: %s", p) }