mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 16:13:45 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| 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
 | |
| }
 | 
