@@ -298,13 +298,13 @@ func (ws *Conn) Config() *Config { return ws.config }
298
298
func (ws * Conn ) Request () * http.Request { return ws .request }
299
299
300
300
// 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 )
303
303
Unmarshal func (data []byte , payloadType byte , v interface {}) (err error )
304
304
}
305
305
306
306
// 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 ) {
308
308
data , payloadType , err := cd .Marshal (v )
309
309
if err != nil {
310
310
return err
@@ -326,7 +326,7 @@ func (cd Codec) Send(ws *Conn, v interface{}) (err error) {
326
326
// limit, ErrFrameTooLarge is returned; in this case frame is not read off wire
327
327
// completely. The next call to Receive would read and discard leftover data of
328
328
// 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 ) {
330
330
ws .rio .Lock ()
331
331
defer ws .rio .Unlock ()
332
332
if ws .frameReader != nil {
@@ -416,7 +416,7 @@ Trivial usage:
416
416
data = []byte{0, 1, 2}
417
417
websocket.Message.Send(ws, data)
418
418
*/
419
- var Message = Codec { marshal , unmarshal }
419
+ var Message = Codec [ interface {}]{ Marshal : marshal , Unmarshal : unmarshal }
420
420
421
421
func jsonMarshal (v interface {}) (msg []byte , payloadType byte , err error ) {
422
422
msg , err = json .Marshal (v )
@@ -446,4 +446,4 @@ Trivial usage:
446
446
// send JSON type T
447
447
websocket.JSON.Send(ws, data)
448
448
*/
449
- var JSON = Codec { jsonMarshal , jsonUnmarshal }
449
+ var JSON = Codec [ interface {}]{ Marshal : jsonMarshal , Unmarshal : jsonUnmarshal }
0 commit comments