docs: @Override
      public ModbusMessage createMessage(int functionCode) {
          ModbusMessage msg;
  
          switch (ModbusFunctionCode.get(functionCode)) {
              case READ_COILS:
                  msg = new ReadCoilsRequest();
                  break;
              case READ_DISCRETE_INPUTS:
                  msg = new ReadDiscreteInputsRequest();
                  break;
              case READ_HOLDING_REGISTERS:
                  msg = new ReadHoldingRegistersRequest();
                  break;
              case READ_INPUT_REGISTERS:
                  msg = new ReadInputRegistersRequest();
                  break;
              case WRITE_SINGLE_COIL:
                  msg = new WriteSingleCoilRequest();
                  break;
              case WRITE_SINGLE_REGISTER:
                  msg = new WriteSingleRegisterRequest();
                  break;
              case WRITE_MULTIPLE_COILS:
                  msg = new WriteMultipleCoilsRequest();
                  break;
              case WRITE_MULTIPLE_REGISTERS:
                  msg = new WriteMultipleRegistersRequest();
                  break;
              case MASK_WRITE_REGISTER:
                  msg = new MaskWriteRegisterRequest();
                  break;
              case READ_WRITE_MULTIPLE_REGISTERS:
                  msg = new ReadWriteMultipleRegistersRequest();
                  break;
              case READ_FIFO_QUEUE:
                  msg = new ReadFifoQueueRequest();
                  break;
              case READ_FILE_RECORD:
                  msg = new ReadFileRecordRequest();
                  break;
              case WRITE_FILE_RECORD:
                  msg = new WriteFileRecordRequest();
                  break;
              case READ_EXCEPTION_STATUS:
                  msg = new ReadExceptionStatusRequest();
                  break;
              case REPORT_SLAVE_ID:
                  msg = new ReportSlaveIdRequest();
                  break;
              case GET_COMM_EVENT_COUNTER:
                  msg = new GetCommEventCounterRequest();
                  break;
              case GET_COMM_EVENT_LOG:
                  msg = new GetCommEventLogRequest();
                  break;
              case DIAGNOSTICS:
                  msg = new DiagnosticsRequest();
                  break;
              case ENCAPSULATED_INTERFACE_TRANSPORT:
                  msg = new EncapsulatedInterfaceTransportRequest();
                  break;
              default:
                  msg = new IllegalFunctionRequest(functionCode);
          }
          return msg;
      }