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 }