64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
// Use of this source code is governed by the Polyform License
|
|
// that can be found in the LICENSE file.
|
|
|
|
package engine
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
)
|
|
|
|
// PullPolicy defines the container image pull policy.
|
|
type PullPolicy int
|
|
|
|
// PullPolicy enumeration.
|
|
const (
|
|
PullDefault PullPolicy = iota
|
|
PullAlways
|
|
PullIfNotExists
|
|
PullNever
|
|
)
|
|
|
|
func (p PullPolicy) String() string {
|
|
return pullPolicyID[p]
|
|
}
|
|
|
|
var pullPolicyID = map[PullPolicy]string{
|
|
PullDefault: "default",
|
|
PullAlways: "always",
|
|
PullIfNotExists: "if-not-exists",
|
|
PullNever: "never",
|
|
}
|
|
|
|
var pullPolicyName = map[string]PullPolicy{
|
|
"": PullDefault,
|
|
"default": PullDefault,
|
|
"always": PullAlways,
|
|
"if-not-exists": PullIfNotExists,
|
|
"never": PullNever,
|
|
}
|
|
|
|
// MarshalJSON marshals the string representation of the
|
|
// pull type to JSON.
|
|
func (p *PullPolicy) MarshalJSON() ([]byte, error) {
|
|
buffer := bytes.NewBufferString(`"`)
|
|
buffer.WriteString(pullPolicyID[*p])
|
|
buffer.WriteString(`"`)
|
|
return buffer.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the json representation of the
|
|
// pull type from a string value.
|
|
func (p *PullPolicy) UnmarshalJSON(b []byte) error {
|
|
// unmarshal as string
|
|
var s string
|
|
err := json.Unmarshal(b, &s)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// lookup value
|
|
*p = pullPolicyName[s]
|
|
return nil
|
|
}
|