add transport codec
This commit is contained in:
		
							
								
								
									
										10
									
								
								transport/codec/codec.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								transport/codec/codec.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | package codec | ||||||
|  |  | ||||||
|  | // Codec is used for encoding where the transport doesn't natively support | ||||||
|  | // headers in the message type. In this case the entire message is | ||||||
|  | // encoded as the payload | ||||||
|  | type Codec interface { | ||||||
|  | 	Marshal(interface{}) ([]byte, error) | ||||||
|  | 	Unmarshal([]byte, interface{}) error | ||||||
|  | 	String() string | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								transport/codec/json/json.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								transport/codec/json/json.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | package json | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  |  | ||||||
|  | 	"github.com/micro/go-micro/transport/codec" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type jsonCodec struct{} | ||||||
|  |  | ||||||
|  | func (j jsonCodec) Marshal(v interface{}) ([]byte, error) { | ||||||
|  | 	return json.Marshal(v) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (j jsonCodec) Unmarshal(d []byte, v interface{}) error { | ||||||
|  | 	return json.Unmarshal(d, v) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (j jsonCodec) String() string { | ||||||
|  | 	return "json" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewCodec() codec.Codec { | ||||||
|  | 	return jsonCodec{} | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								transport/codec/noop/noop.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								transport/codec/noop/noop.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | package noop | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"errors" | ||||||
|  |  | ||||||
|  | 	"github.com/micro/go-micro/transport" | ||||||
|  | 	"github.com/micro/go-micro/transport/codec" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type noopCodec struct{} | ||||||
|  |  | ||||||
|  | func (n noopCodec) Marshal(v interface{}) ([]byte, error) { | ||||||
|  | 	msg, ok := v.(*transport.Message) | ||||||
|  | 	if !ok { | ||||||
|  | 		return nil, errors.New("invalid message") | ||||||
|  | 	} | ||||||
|  | 	return msg.Body, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (n noopCodec) Unmarshal(d []byte, v interface{}) error { | ||||||
|  | 	msg, ok := v.(*transport.Message) | ||||||
|  | 	if !ok { | ||||||
|  | 		return errors.New("invalid message") | ||||||
|  | 	} | ||||||
|  | 	msg.Body = d | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (n noopCodec) String() string { | ||||||
|  | 	return "noop" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewCodec() codec.Codec { | ||||||
|  | 	return noopCodec{} | ||||||
|  | } | ||||||
| @@ -4,11 +4,13 @@ import ( | |||||||
| 	"crypto/tls" | 	"crypto/tls" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/micro/go-micro/transport/codec" | ||||||
| 	"golang.org/x/net/context" | 	"golang.org/x/net/context" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type Options struct { | type Options struct { | ||||||
| 	Addrs     []string | 	Addrs     []string | ||||||
|  | 	Codec     codec.Codec | ||||||
| 	Secure    bool | 	Secure    bool | ||||||
| 	TLSConfig *tls.Config | 	TLSConfig *tls.Config | ||||||
| 	// Timeout sets the timeout for Send/Recv | 	// Timeout sets the timeout for Send/Recv | ||||||
| @@ -46,6 +48,14 @@ func Addrs(addrs ...string) Option { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Codec sets the codec used for encoding where the transport | ||||||
|  | // does not support message headers | ||||||
|  | func Codec(c codec.Codec) Option { | ||||||
|  | 	return func(o *Options) { | ||||||
|  | 		o.Codec = c | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| // Timeout sets the timeout for Send/Recv execution | // Timeout sets the timeout for Send/Recv execution | ||||||
| func Timeout(t time.Duration) Option { | func Timeout(t time.Duration) Option { | ||||||
| 	return func(o *Options) { | 	return func(o *Options) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user