Make json/protobuf codecs
This commit is contained in:
		| @@ -5,6 +5,8 @@ import ( | ||||
| 	errs "errors" | ||||
|  | ||||
| 	"github.com/micro/go-micro/codec" | ||||
| 	"github.com/micro/go-micro/codec/json" | ||||
| 	"github.com/micro/go-micro/codec/proto" | ||||
| 	"github.com/micro/go-micro/codec/jsonrpc" | ||||
| 	"github.com/micro/go-micro/codec/protorpc" | ||||
| 	"github.com/micro/go-micro/errors" | ||||
| @@ -65,9 +67,9 @@ var ( | ||||
| 	defaultContentType = "application/octet-stream" | ||||
|  | ||||
| 	defaultCodecs = map[string]codec.NewCodec{ | ||||
| 		"application/json":         jsonrpc.NewCodec, | ||||
| 		"application/protobuf":     proto.NewCodec, | ||||
| 		"application/json":         json.NewCodec, | ||||
| 		"application/json-rpc":     jsonrpc.NewCodec, | ||||
| 		"application/protobuf":     protorpc.NewCodec, | ||||
| 		"application/proto-rpc":    protorpc.NewCodec, | ||||
| 		"application/octet-stream": protorpc.NewCodec, | ||||
| 	} | ||||
| @@ -110,7 +112,7 @@ func (c *rpcCodec) WriteRequest(req *request, body interface{}) error { | ||||
| 		Method: req.ServiceMethod, | ||||
| 		Type:   codec.Request, | ||||
| 		Header: map[string]string{ | ||||
| 			"X-Micro-Target": req.Service, | ||||
| 			"X-Micro-Service": req.Service, | ||||
| 			"X-Micro-Method": req.ServiceMethod, | ||||
| 		}, | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										43
									
								
								codec/json/json.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								codec/json/json.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| // Package json provides a json codec | ||||
| package json | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io" | ||||
|  | ||||
| 	"github.com/micro/go-micro/codec" | ||||
| ) | ||||
|  | ||||
| type Codec struct { | ||||
| 	Conn    io.ReadWriteCloser | ||||
| 	Encoder *json.Encoder | ||||
| 	Decoder *json.Decoder | ||||
| } | ||||
|  | ||||
| func (c *Codec) ReadHeader(m *codec.Message, t codec.MessageType) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (c *Codec) ReadBody(b interface{}) error { | ||||
| 	return c.Decoder.Decode(b) | ||||
| } | ||||
|  | ||||
| func (c *Codec) Write(m *codec.Message, b interface{}) error { | ||||
| 	return c.Encoder.Encode(b) | ||||
| } | ||||
|  | ||||
| func (c *Codec) Close() error { | ||||
| 	return c.Conn.Close() | ||||
| } | ||||
|  | ||||
| func (c *Codec) String() string { | ||||
| 	return "json" | ||||
| } | ||||
|  | ||||
| func NewCodec(c io.ReadWriteCloser) codec.Codec { | ||||
| 	return &Codec{ | ||||
| 		Conn:    c, | ||||
| 		Decoder: json.NewDecoder(c), | ||||
| 		Encoder: json.NewEncoder(c), | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										49
									
								
								codec/proto/proto.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								codec/proto/proto.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| // Package proto provides a proto codec | ||||
| package proto | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/micro/go-micro/codec" | ||||
| ) | ||||
|  | ||||
| type Codec struct { | ||||
| 	Conn io.ReadWriteCloser | ||||
| } | ||||
|  | ||||
| func (c *Codec) ReadHeader(m *codec.Message, t codec.MessageType) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (c *Codec) ReadBody(b interface{}) error { | ||||
| 	buf, err := ioutil.ReadAll(c.Conn) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return proto.Unmarshal(buf, b.(proto.Message)) | ||||
| } | ||||
|  | ||||
| func (c *Codec) Write(m *codec.Message, b interface{}) error { | ||||
| 	buf, err := proto.Marshal(b.(proto.Message)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = c.Conn.Write(buf) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (c *Codec) Close() error { | ||||
| 	return c.Conn.Close() | ||||
| } | ||||
|  | ||||
| func (c *Codec) String() string { | ||||
| 	return "proto" | ||||
| } | ||||
|  | ||||
| func NewCodec(c io.ReadWriteCloser) codec.Codec { | ||||
| 	return &Codec{ | ||||
| 		Conn: c, | ||||
| 	} | ||||
| } | ||||
| @@ -4,6 +4,8 @@ import ( | ||||
| 	"bytes" | ||||
|  | ||||
| 	"github.com/micro/go-micro/codec" | ||||
|         "github.com/micro/go-micro/codec/json" | ||||
|         "github.com/micro/go-micro/codec/proto" | ||||
| 	"github.com/micro/go-micro/codec/jsonrpc" | ||||
| 	"github.com/micro/go-micro/codec/protorpc" | ||||
| 	"github.com/micro/go-micro/transport" | ||||
| @@ -25,9 +27,9 @@ type readWriteCloser struct { | ||||
|  | ||||
| var ( | ||||
| 	defaultCodecs = map[string]codec.NewCodec{ | ||||
| 		"application/json":         jsonrpc.NewCodec, | ||||
| 		"application/json":         json.NewCodec, | ||||
| 		"application/json-rpc":     jsonrpc.NewCodec, | ||||
| 		"application/protobuf":     protorpc.NewCodec, | ||||
| 		"application/protobuf":     proto.NewCodec, | ||||
| 		"application/proto-rpc":    protorpc.NewCodec, | ||||
| 		"application/octet-stream": protorpc.NewCodec, | ||||
| 	} | ||||
| @@ -77,6 +79,10 @@ func (c *rpcCodec) ReadRequestHeader(r *request, first bool) error { | ||||
| 		m.Header = tm.Header | ||||
| 	} | ||||
|  | ||||
| 	// set some internal things | ||||
| 	m.Target = m.Header["X-Micro-Service"] | ||||
| 	m.Method = m.Header["X-Micro-Method"] | ||||
|  | ||||
| 	err := c.codec.ReadHeader(&m, codec.Request) | ||||
| 	r.ServiceMethod = m.Method | ||||
| 	r.Seq = m.Id | ||||
|   | ||||
		Reference in New Issue
	
	Block a user