123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*
- Copyright 2014 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package runtime
- import (
- "bytes"
- "encoding/json"
- "errors"
- )
- func (re *RawExtension) UnmarshalJSON(in []byte) error {
- if re == nil {
- return errors.New("runtime.RawExtension: UnmarshalJSON on nil pointer")
- }
- if !bytes.Equal(in, []byte("null")) {
- re.Raw = append(re.Raw[0:0], in...)
- }
- return nil
- }
- // Marshal 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 (re RawExtension) MarshalJSON() ([]byte, error) {
- if re.Raw == nil {
- // TODO: this is to support legacy behavior of JSONPrinter and YAMLPrinter, which
- // expect to call json.Marshal on arbitrary versioned objects (even those not in
- // the scheme). pkg/kubectl/resource#AsVersionedObjects and its interaction with
- // kubectl get on objects not in the scheme needs to be updated to ensure that the
- // objects that are not part of the scheme are correctly put into the right form.
- if re.Object != nil {
- return json.Marshal(re.Object)
- }
- return []byte("null"), nil
- }
- // TODO: Check whether ContentType is actually JSON before returning it.
- return re.Raw, nil
- }
|