qbeon/webwire-go

View on GitHub
message/writeMsgNamelessRequest.go

Summary

Maintainability
A
45 mins
Test Coverage
package message

import (
    "fmt"
    "io"
)

// WriteMsgNamelessRequest writes a nameless (initially without a name)
// request message to the given writer closing it eventually
func WriteMsgNamelessRequest(
    writer io.WriteCloser,
    reqType byte,
    identifier []byte,
    binaryPayload []byte,
) error {
    msgType := msgTypeRequestCloseSession
    if reqType == MsgRequestRestoreSession {
        msgType = msgTypeRequestRestoreSession
    } else if reqType != MsgRequestCloseSession {
        panic(fmt.Errorf("unexpected nameless request type: %d", reqType))
    }

    // Write message type flag
    if _, err := writer.Write(msgType); err != nil {
        if closeErr := writer.Close(); closeErr != nil {
            return fmt.Errorf("%s: %s", err, closeErr)
        }
        return err
    }

    // Write request identifier
    if _, err := writer.Write(identifier); err != nil {
        if closeErr := writer.Close(); closeErr != nil {
            return fmt.Errorf("%s: %s", err, closeErr)
        }
        return err
    }

    // Write payload
    if len(binaryPayload) > 0 {
        if _, err := writer.Write(binaryPayload); err != nil {
            if closeErr := writer.Close(); closeErr != nil {
                return fmt.Errorf("%s: %s", err, closeErr)
            }
            return err
        }
    }

    return writer.Close()
}