mirror of
https://github.com/containers/podman.git
synced 2025-06-17 06:57:43 +08:00

Vendor in the latest changes for buildah to apply the implemented features here as well. Signed-off-by: Sascha Grunert <sgrunert@suse.com>
32 lines
1.1 KiB
Go
32 lines
1.1 KiB
Go
package v1
|
|
|
|
import "encoding/json"
|
|
|
|
// UnmarshalJSON implements the json.Unmarshaller interface.
|
|
// If the value is a string, it sets the Value field of the StringSource.
|
|
// Otherwise, it is unmarshaled into the StringSourceSpec struct
|
|
func (s *StringSource) UnmarshalJSON(value []byte) error {
|
|
// If we can unmarshal to a simple string, just set the value
|
|
var simpleValue string
|
|
if err := json.Unmarshal(value, &simpleValue); err == nil {
|
|
s.Value = simpleValue
|
|
return nil
|
|
}
|
|
|
|
// Otherwise do the full struct unmarshal
|
|
return json.Unmarshal(value, &s.StringSourceSpec)
|
|
}
|
|
|
|
// MarshalJSON implements the json.Marshaller interface.
|
|
// If the StringSource contains only a string Value (or is empty), it is marshaled as a JSON string.
|
|
// Otherwise, the StringSourceSpec struct is marshaled as a JSON object.
|
|
func (s *StringSource) MarshalJSON() ([]byte, error) {
|
|
// If we have only a cleartext value set, do a simple string marshal
|
|
if s.StringSourceSpec == (StringSourceSpec{Value: s.Value}) {
|
|
return json.Marshal(s.Value)
|
|
}
|
|
|
|
// Otherwise do the full struct marshal of the externalized bits
|
|
return json.Marshal(s.StringSourceSpec)
|
|
}
|