67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
package config
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"errors"
|
|
)
|
|
|
|
var (
|
|
ErrMissingName = errors.New("Missing or empty name field")
|
|
ErrMissingDesc = errors.New("Missing or empty description field")
|
|
ErrMissingSite = errors.New("Missing or empty website field")
|
|
ErrMissingInstall = errors.New("Missing or empty install field")
|
|
ErrMissingVstr = errors.New("Missing or empty versions field")
|
|
ErrMissingRequire = errors.New("Missing or empty require field")
|
|
)
|
|
|
|
// PluginInfo contains all the needed info about a plugin
|
|
// The info is just strings and are not used beyond that (except
|
|
// the Site and Install fields should be valid URLs). This means
|
|
// that the requirements for example can be formatted however the
|
|
// plugin maker decides, the fields will only be parsed by humans
|
|
// Name: name of plugin
|
|
// Desc: description of plugin
|
|
// Site: home website of plugin
|
|
// Install: install link for plugin (can be link to repo or zip file)
|
|
// Vstr: version
|
|
// Require: list of dependencies and requirements
|
|
type PluginInfo struct {
|
|
Name string `json:"name"`
|
|
Desc string `json:"description"`
|
|
Site string `json:"website"`
|
|
Install string `json:"install"`
|
|
Vstr string `json:"version"`
|
|
Require []string `json:"require"`
|
|
}
|
|
|
|
// NewPluginInfo parses a JSON input into a valid PluginInfo struct
|
|
// Returns an error if there are any missing fields or any invalid fields
|
|
// There are no optional fields in a plugin info json file
|
|
func NewPluginInfo(data []byte) (*PluginInfo, error) {
|
|
var info PluginInfo
|
|
|
|
dec := json.NewDecoder(bytes.NewReader(data))
|
|
// dec.DisallowUnknownFields() // Force errors
|
|
|
|
if err := dec.Decode(&info); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// if len(info.Name) == 0 {
|
|
// return nil, ErrMissingName
|
|
// } else if len(info.Desc) == 0 {
|
|
// return nil, ErrMissingDesc
|
|
// } else if len(info.Site) == 0 {
|
|
// return nil, ErrMissingSite
|
|
// } else if len(info.Install) == 0 {
|
|
// return nil, ErrMissingInstall
|
|
// } else if len(info.Vstr) == 0 {
|
|
// return nil, ErrMissingVstr
|
|
// } else if len(info.Require) == 0 {
|
|
// return nil, ErrMissingRequire
|
|
// }
|
|
|
|
return &info, nil
|
|
}
|