summaryrefslogtreecommitdiff
path: root/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go')
-rw-r--r--vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go17
1 files changed, 15 insertions, 2 deletions
diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go
index b4dc78b3e..843cd3b15 100644
--- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go
+++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go
@@ -17,7 +17,9 @@ limitations under the License.
package v1
import (
+ "bytes"
"encoding/json"
+ "errors"
"fmt"
"k8s.io/apimachinery/pkg/fields"
@@ -254,13 +256,24 @@ func ResetObjectMetaForStatus(meta, existingMeta Object) {
}
// MarshalJSON implements json.Marshaler
+// MarshalJSON may get called on pointers or values, so implement MarshalJSON on value.
+// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go
func (f Fields) MarshalJSON() ([]byte, error) {
- return json.Marshal(&f.Map)
+ if f.Raw == nil {
+ return []byte("null"), nil
+ }
+ return f.Raw, nil
}
// UnmarshalJSON implements json.Unmarshaler
func (f *Fields) UnmarshalJSON(b []byte) error {
- return json.Unmarshal(b, &f.Map)
+ if f == nil {
+ return errors.New("metav1.Fields: UnmarshalJSON on nil pointer")
+ }
+ if !bytes.Equal(b, []byte("null")) {
+ f.Raw = append(f.Raw[0:0], b...)
+ }
+ return nil
}
var _ json.Marshaler = Fields{}