Files

124 lines
2.7 KiB
Go

package model
import (
"encoding/json"
"fmt"
)
type ProviderPlatformOs int
type ProviderPlatformArch int
const (
OsDarwin ProviderPlatformOs = iota
OsLinux
OsWindows
)
var (
osName = map[ProviderPlatformOs]string{
OsDarwin: "darwin",
OsLinux: "linux",
OsWindows: "windows",
}
osFromName = map[string]ProviderPlatformOs{
"darwin": OsDarwin,
"linux": OsLinux,
"windows": OsWindows,
}
)
func (os ProviderPlatformOs) String() string {
return osName[os]
}
const (
ArchAmd64 ProviderPlatformArch = iota
ArchArm64
)
var (
archName = map[ProviderPlatformArch]string{
ArchAmd64: "amd64",
ArchArm64: "arm",
}
archFromName = map[string]ProviderPlatformArch{
"amd64": ArchAmd64,
"arm": ArchArm64,
}
)
func (arch ProviderPlatformArch) String() string {
return archName[arch]
}
type ProviderPlatform struct {
Os ProviderPlatformOs
Arch ProviderPlatformArch
}
// MarshalJSON implementeert json.Marshaler interface
func (p ProviderPlatform) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
Os string `json:"os"`
Arch string `json:"arch"`
}{
Os: p.Os.String(),
Arch: p.Arch.String(),
})
}
// UnmarshalJSON implementeert json.Unmarshaler interface
func (p *ProviderPlatform) UnmarshalJSON(data []byte) error {
var temp struct {
Os string `json:"os"`
Arch string `json:"arch"`
}
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
var ok bool
if p.Os, ok = osFromName[temp.Os]; !ok {
return fmt.Errorf("unknown OS: %s", temp.Os)
}
if p.Arch, ok = archFromName[temp.Arch]; !ok {
return fmt.Errorf("unknown architecture: %s", temp.Arch)
}
return nil
}
type ProviderVersion struct {
Version string `json:"version"`
Protocols []string `json:"protocols"`
Platforms []ProviderPlatform `json:"platforms"`
}
type ProviderVersions struct {
Versions []ProviderVersion `json:"versions"`
}
type GpgPublicKey struct {
KeyId string `json:"key_id"`
AsciiArmor string `json:"ascii_armor"`
TrustSignature string `json:"trust_signature"`
Source string `json:"source"`
SourceUrl string `json:"source_url"`
}
type ProviderPackageResponse struct {
Protocols []string `json:"protocols"`
Os string `json:"os"`
Arch string `json:"arch"`
Filename string `json:"filename"`
DownloadUrl string `json:"download_url"`
ShasumsUrl string `json:"shasums_url"`
ShasumsSignatureUrl string `json:"shasums_signature_url"`
Shasum string `json:"shasum"`
SigningKeys map[string][]GpgPublicKey `json:"signing_keys"`
}