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"` }