github.com/micro/go-micro/v2@v2.9.1/util/io/io.go (about) 1 // Package io is for io management 2 package io 3 4 import ( 5 "io" 6 7 "github.com/micro/go-micro/v2/transport" 8 ) 9 10 type rwc struct { 11 socket transport.Socket 12 } 13 14 func (r *rwc) Read(p []byte) (n int, err error) { 15 m := new(transport.Message) 16 if err := r.socket.Recv(m); err != nil { 17 return 0, err 18 } 19 copy(p, m.Body) 20 return len(m.Body), nil 21 } 22 23 func (r *rwc) Write(p []byte) (n int, err error) { 24 err = r.socket.Send(&transport.Message{ 25 Body: p, 26 }) 27 if err != nil { 28 return 0, err 29 } 30 return len(p), nil 31 } 32 33 func (r *rwc) Close() error { 34 return r.socket.Close() 35 } 36 37 // NewRWC returns a new ReadWriteCloser 38 func NewRWC(sock transport.Socket) io.ReadWriteCloser { 39 return &rwc{sock} 40 }