Skip to content

Commit 53c8336

Browse files
committed
generic codec
1 parent 296f09a commit 53c8336

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module golang.org/x/net
22

3-
go 1.17
3+
go 1.18
44

55
require (
66
golang.org/x/sys v0.4.0

websocket/websocket.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -298,13 +298,13 @@ func (ws *Conn) Config() *Config { return ws.config }
298298
func (ws *Conn) Request() *http.Request { return ws.request }
299299

300300
// Codec represents a symmetric pair of functions that implement a codec.
301-
type Codec struct {
302-
Marshal func(v interface{}) (data []byte, payloadType byte, err error)
301+
type Codec[T any] struct {
302+
Marshal func(v T) (data []byte, payloadType byte, err error)
303303
Unmarshal func(data []byte, payloadType byte, v interface{}) (err error)
304304
}
305305

306306
// Send sends v marshaled by cd.Marshal as single frame to ws.
307-
func (cd Codec) Send(ws *Conn, v interface{}) (err error) {
307+
func (cd Codec[T]) Send(ws *Conn, v T) (err error) {
308308
data, payloadType, err := cd.Marshal(v)
309309
if err != nil {
310310
return err
@@ -326,7 +326,7 @@ func (cd Codec) Send(ws *Conn, v interface{}) (err error) {
326326
// limit, ErrFrameTooLarge is returned; in this case frame is not read off wire
327327
// completely. The next call to Receive would read and discard leftover data of
328328
// previous oversized frame before processing next frame.
329-
func (cd Codec) Receive(ws *Conn, v interface{}) (err error) {
329+
func (cd Codec[T]) Receive(ws *Conn, v interface{}) (err error) {
330330
ws.rio.Lock()
331331
defer ws.rio.Unlock()
332332
if ws.frameReader != nil {
@@ -416,7 +416,7 @@ Trivial usage:
416416
data = []byte{0, 1, 2}
417417
websocket.Message.Send(ws, data)
418418
*/
419-
var Message = Codec{marshal, unmarshal}
419+
var Message = Codec[interface{}]{Marshal: marshal, Unmarshal: unmarshal}
420420

421421
func jsonMarshal(v interface{}) (msg []byte, payloadType byte, err error) {
422422
msg, err = json.Marshal(v)
@@ -446,4 +446,4 @@ Trivial usage:
446446
// send JSON type T
447447
websocket.JSON.Send(ws, data)
448448
*/
449-
var JSON = Codec{jsonMarshal, jsonUnmarshal}
449+
var JSON = Codec[interface{}]{Marshal: jsonMarshal, Unmarshal: jsonUnmarshal}

0 commit comments

Comments
 (0)