124 lines
2.7 KiB
Go
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"`
|
|
}
|