github.com/bluenviron/gomavlib/v2@v2.2.1-0.20240308101627-2c07e3da629c/pkg/dialect/readwriter.go (about)

     1  package dialect
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/bluenviron/gomavlib/v2/pkg/message"
     7  )
     8  
     9  // ReadWriter is a Dialect Reader and Writer.
    10  type ReadWriter struct {
    11  	messageRWs map[uint32]*message.ReadWriter
    12  }
    13  
    14  // NewReadWriter allocates a ReadWriter.
    15  func NewReadWriter(d *Dialect) (*ReadWriter, error) {
    16  	rw := &ReadWriter{
    17  		messageRWs: make(map[uint32]*message.ReadWriter),
    18  	}
    19  
    20  	for _, m := range d.Messages {
    21  		if _, ok := rw.messageRWs[m.GetID()]; ok {
    22  			return nil, fmt.Errorf("duplicate message with id %d", m.GetID())
    23  		}
    24  
    25  		de, err := message.NewReadWriter(m)
    26  		if err != nil {
    27  			return nil, fmt.Errorf("message %T: %w", m, err)
    28  		}
    29  
    30  		rw.messageRWs[m.GetID()] = de
    31  	}
    32  
    33  	return rw, nil
    34  }
    35  
    36  // GetMessage returns the ReadWriter of a message.
    37  func (rw *ReadWriter) GetMessage(id uint32) *message.ReadWriter {
    38  	mrw, ok := rw.messageRWs[id]
    39  	if !ok {
    40  		return nil
    41  	}
    42  	return mrw
    43  }