Files
build-emacs-for-macos/pkg/cask/release_info.go

68 lines
1.1 KiB
Go

package cask
import (
"sort"
"strings"
)
type ReleaseInfo struct {
Name string
Version string
Assets map[string]*ReleaseAsset
}
func (s *ReleaseInfo) Asset(needles ...string) *ReleaseAsset {
if len(needles) == 1 {
if a, ok := s.Assets[needles[0]]; ok {
return a
}
}
// Dirty and inefficient way to ensure assets are searched in a predictable
// order.
var assets []*ReleaseAsset
for _, a := range s.Assets {
assets = append(assets, a)
}
sort.SliceStable(assets, func(i, j int) bool {
return assets[i].Filename < assets[j].Filename
})
assetsLoop:
for _, a := range assets {
for _, needle := range needles {
if !strings.Contains(a.Filename, needle) {
continue assetsLoop
}
}
return a
}
return nil
}
func (s *ReleaseInfo) DownloadURL(needles ...string) string {
a := s.Asset(needles...)
if a == nil {
return ""
}
return a.DownloadURL
}
func (s *ReleaseInfo) SHA256(needles ...string) string {
a := s.Asset(needles...)
if a == nil {
return ""
}
return a.SHA256
}
type ReleaseAsset struct {
Filename string
DownloadURL string
SHA256 string
}