From ff5f211a830ce644d1cd283b567b1bc931c0bd7b Mon Sep 17 00:00:00 2001 From: Arsen Musayelyan Date: Sat, 7 May 2022 14:01:10 -0700 Subject: [PATCH] Use type uint8 to replace boolean fields in response --- client/client.go | 6 +++--- internal/types/types.go | 12 +++++++++--- server/server.go | 14 +++++++------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/client/client.go b/client/client.go index 409d6c3..f3fbc59 100644 --- a/client/client.go +++ b/client/client.go @@ -105,7 +105,7 @@ func (c *Client) Call(ctx context.Context, rcvr, method string, arg interface{}, c.chMtx.Unlock() // If response is an error, return error - if resp.IsError { + if resp.Type == types.ResponseTypeError { return errors.New(resp.Error) } @@ -118,7 +118,7 @@ func (c *Client) Call(ctx context.Context, rcvr, method string, arg interface{}, retVal := reflect.ValueOf(ret) // If response is a channel - if resp.IsChannel { + if resp.Type == types.ResponseTypeChannel { // If return value is not a channel, return error if retVal.Kind() != reflect.Chan { return ErrReturnNotChannel @@ -137,7 +137,7 @@ func (c *Client) Call(ctx context.Context, rcvr, method string, arg interface{}, // For every value received from channel for val := range c.chs[chID] { //s := time.Now() - if val.ChannelDone { + if val.Type == types.ResponseTypeChannelDone { // Close and delete channel c.chMtx.Lock() close(c.chs[chID]) diff --git a/internal/types/types.go b/internal/types/types.go index 52f7370..5632484 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -26,12 +26,18 @@ type Request struct { Arg any } +type ResponseType uint8 + +const ( + ResponseTypeError ResponseType = iota + ResponseTypeChannel + ResponseTypeChannelDone +) + // Response represents a response returned by the server type Response struct { + Type ResponseType ID string - ChannelDone bool - IsChannel bool - IsError bool Error string Return any } diff --git a/server/server.go b/server/server.go index 033f632..4243c1a 100644 --- a/server/server.go +++ b/server/server.go @@ -312,7 +312,7 @@ func (s *Server) handleConn(c codec.Codec) { // If function has created a channel if ctx.isChannel { // Set IsChannel to true - res.IsChannel = true + res.Type = types.ResponseTypeChannel // Overwrite return value with channel ID res.Return = ctx.channelID @@ -342,8 +342,8 @@ func (s *Server) handleConn(c codec.Codec) { codecMtx.Lock() c.Encode(types.Response{ - ID: ctx.channelID, - ChannelDone: true, + Type: types.ResponseTypeChannelDone, + ID: ctx.channelID, }) codecMtx.Unlock() }() @@ -361,10 +361,10 @@ func (s *Server) handleConn(c codec.Codec) { func (s *Server) sendErr(c codec.Codec, req types.Request, val any, err error) { // Encode error response using codec c.Encode(types.Response{ - ID: req.ID, - IsError: true, - Error: err.Error(), - Return: val, + Type: types.ResponseTypeError, + ID: req.ID, + Error: err.Error(), + Return: val, }) }