mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package protocol
 | |
| 
 | |
| import (
 | |
| 	"io"
 | |
| 	"io/ioutil"
 | |
| 	"net/http"
 | |
| 
 | |
| 	"github.com/aws/aws-sdk-go/aws"
 | |
| 	"github.com/aws/aws-sdk-go/aws/client/metadata"
 | |
| 	"github.com/aws/aws-sdk-go/aws/request"
 | |
| )
 | |
| 
 | |
| // PayloadUnmarshaler provides the interface for unmarshaling a payload's
 | |
| // reader into a SDK shape.
 | |
| type PayloadUnmarshaler interface {
 | |
| 	UnmarshalPayload(io.Reader, interface{}) error
 | |
| }
 | |
| 
 | |
| // HandlerPayloadUnmarshal implements the PayloadUnmarshaler from a
 | |
| // HandlerList. This provides the support for unmarshaling a payload reader to
 | |
| // a shape without needing a SDK request first.
 | |
| type HandlerPayloadUnmarshal struct {
 | |
| 	Unmarshalers request.HandlerList
 | |
| }
 | |
| 
 | |
| // UnmarshalPayload unmarshals the io.Reader payload into the SDK shape using
 | |
| // the Unmarshalers HandlerList provided. Returns an error if unable
 | |
| // unmarshaling fails.
 | |
| func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v interface{}) error {
 | |
| 	req := &request.Request{
 | |
| 		HTTPRequest: &http.Request{},
 | |
| 		HTTPResponse: &http.Response{
 | |
| 			StatusCode: 200,
 | |
| 			Header:     http.Header{},
 | |
| 			Body:       ioutil.NopCloser(r),
 | |
| 		},
 | |
| 		Data: v,
 | |
| 	}
 | |
| 
 | |
| 	h.Unmarshalers.Run(req)
 | |
| 
 | |
| 	return req.Error
 | |
| }
 | |
| 
 | |
| // PayloadMarshaler provides the interface for marshaling a SDK shape into and
 | |
| // io.Writer.
 | |
| type PayloadMarshaler interface {
 | |
| 	MarshalPayload(io.Writer, interface{}) error
 | |
| }
 | |
| 
 | |
| // HandlerPayloadMarshal implements the PayloadMarshaler from a HandlerList.
 | |
| // This provides support for marshaling a SDK shape into an io.Writer without
 | |
| // needing a SDK request first.
 | |
| type HandlerPayloadMarshal struct {
 | |
| 	Marshalers request.HandlerList
 | |
| }
 | |
| 
 | |
| // MarshalPayload marshals the SDK shape into the io.Writer using the
 | |
| // Marshalers HandlerList provided. Returns an error if unable if marshal
 | |
| // fails.
 | |
| func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface{}) error {
 | |
| 	req := request.New(
 | |
| 		aws.Config{},
 | |
| 		metadata.ClientInfo{},
 | |
| 		request.Handlers{},
 | |
| 		nil,
 | |
| 		&request.Operation{HTTPMethod: "PUT"},
 | |
| 		v,
 | |
| 		nil,
 | |
| 	)
 | |
| 
 | |
| 	h.Marshalers.Run(req)
 | |
| 
 | |
| 	if req.Error != nil {
 | |
| 		return req.Error
 | |
| 	}
 | |
| 
 | |
| 	io.Copy(w, req.GetBody())
 | |
| 
 | |
| 	return nil
 | |
| }
 |