Files
wails/cmd/linuxdb.go
2019-08-06 18:18:42 +10:00

96 lines
2.1 KiB
Go

package cmd
import (
"log"
"github.com/leaanthony/mewn"
"gopkg.in/yaml.v3"
)
type LinuxDB struct {
Distributions map[string]*Distribution `yaml:"distributions"`
}
type Distribution struct {
ID string `yaml:"id"`
Releases map[string]*Release `yaml:"releases"`
}
func (d *Distribution) GetRelease(name string) *Release {
result := d.Releases[name]
if result == nil {
result = d.Releases["default"]
}
return result
}
type Release struct {
Name string `yaml:"name"`
Version string `yaml:"version"`
Programs []*Prerequisite `yaml:"programs"`
Libraries []*Prerequisite `yaml:"libraries"`
}
type Prerequisite struct {
Name string `yaml:"name"`
Help string `yaml:"help,omitempty"`
}
func (l *LinuxDB) Load(filename string) error {
if fs.FileExists(filename) {
data, err := fs.LoadAsBytes(filename)
if err != nil {
return err
}
return l.ImportData(data)
}
return nil
}
func (l *LinuxDB) ImportData(data []byte) error {
return yaml.Unmarshal(data, l)
}
func (l *LinuxDB) GetDistro(name string) *Distribution {
return l.Distributions[name]
}
// func (l *LinuxDB) GetDistribution(name string) *Distribution {
// return l.Distributions[name]
// }
// func (l *LinuxDB) Save() error {
// return fs.SaveAsJSON(l, l.filename)
// }
// func (l *LinuxDB) GetPreRequisistes(name string, version string) ([]*DistributionPrerequisite, error) {
// distro := l.GetDistribution(name)
// if distro == nil {
// return nil, fmt.Errorf("distribution %s unsupported at this time", name)
// }
// releaseInfo := distro.GetReleaseOrDefault(version)
// return releaseInfo.Prerequisites, nil
// }
// func (l *LinuxDBDistribution) GetReleaseOrDefault(release string) *DistributionRelease {
// result := l.Releases[release]
// if result == nil {
// result = l.Releases["default"]
// }
// return result
// }
func NewLinuxDB() *LinuxDB {
data := mewn.Bytes("./linuxdb.yaml")
result := LinuxDB{
Distributions: make(map[string]*Distribution),
}
err := result.ImportData(data)
if err != nil {
log.Fatal(err)
}
return &result
}