parseExtraArgs static method

Map<String, dynamic> parseExtraArgs(
  1. String raw
)

Implementation

static Map<String, dynamic> parseExtraArgs(String raw) {
  final extra = <String, dynamic>{};

  final extraParts = raw.split(',');
  for (String extraPart in extraParts) {
    List<String> extraPartParts = extraPart.split(':');

    if (extraPartParts.length > 2) {
      // Join the extra args after the first colon
      extraPartParts = [
        extraPartParts[0],
        extraPartParts.sublist(1).join(':'),
      ];
    }

    String key;

    final RegExp digitalInput = RegExp(r'^io[0-9]+\.di$');
    final RegExp digitalOutput = RegExp(r'^io[0-9]+\.do$');
    final RegExp analogInput = RegExp(r'^io[0-9]+\.ai$');
    final RegExp analogOutput = RegExp(r'^io[0-9]+\.ao$');
    final RegExp counter = RegExp(r'^io[0-9]+\.counter$');
    final RegExp bleId = RegExp(r'^ble.[0-9]+\.id$');
    final RegExp bleHumidity = RegExp(r'^ble.[0-9]+\.hum$');
    final RegExp bleTempC = RegExp(r'^ble.[0-9]+\.tempc$');
    final RegExp bleTempF = RegExp(r'^ble.[0-9]+\.tempf$');
    final RegExp bleModelId = RegExp(r'^ble.[0-9]+\.model_id$');
    final RegExp bleBatteryLevel = RegExp(r'^ble.[0-9]+\.batt$');
    final RegExp bleLuxLevel = RegExp(r'^ble.[0-9]+\.lux$');
    final RegExp bleVoltageLevel = RegExp(r'^ble.[0-9]+\.volt$');
    final RegExp bleRpm = RegExp(r'^ble.[0-9]+\.rpm$');
    final RegExp blePressure = RegExp(r'^ble.[0-9]+\.press$');
    final RegExp bleEventCount = RegExp(r'^ble.[0-9]+\.counter$');
    final RegExp bleXAccel = RegExp(r'^ble.[0-9]+\.x_acc$');
    final RegExp bleYAccel = RegExp(r'^ble.[0-9]+\.y_acc$');
    final RegExp bleZAccel = RegExp(r'^ble.[0-9]+\.z_acc$');
    final RegExp bleMsgCount = RegExp(r'^ble.[0-9]+\.msg_count');
    final RegExp bleMsg = RegExp(r'^ble.[0-9]+\.msg');
    final RegExp bleMagCount = RegExp(r'^ble.[0-9]+\.mag_counter');
    final RegExp bleMagData = RegExp(r'^ble.[0-9]+\.mag_data');
    final RegExp bleRssi = RegExp(r'^ble.[0-9]+\.rssi');

    if (digitalInput.hasMatch(extraPartParts[0])) {
      final gpio = extraPartParts[0].replaceAll('io.', '').replaceAll('.di', '');
      key = 'gpio.$gpio.digital.input';
    } else if (digitalOutput.hasMatch(extraPartParts[0])) {
      final gpio = extraPartParts[0].replaceAll('io.', '').replaceAll('.do', '');
      key = 'gpio.$gpio.digital.output';
    } else if (analogInput.hasMatch(extraPartParts[0])) {
      final gpio = extraPartParts[0].replaceAll('io.', '').replaceAll('.ai', '');
      key = 'gpio.$gpio.analog.input';
    } else if (analogOutput.hasMatch(extraPartParts[0])) {
      final gpio = extraPartParts[0].replaceAll('io.', '').replaceAll('.ao', '');
      key = 'gpio.$gpio.analog.output';
    } else if (counter.hasMatch(extraPartParts[0])) {
      final gpio = extraPartParts[0].replaceAll('io.', '').replaceAll('.counter', '');
      key = 'gpio.$gpio.event.count';
    } else if (bleId.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.id', '');
      key = 'ble.$ble.mac.address';
    } else if (bleHumidity.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.hum', '');
      key = 'ble.$ble.humidity';
    } else if (bleTempC.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.tempc', '');
      key = 'ble.$ble.temperature.celsius';
    } else if (bleTempF.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.tempf', '');
      key = 'ble.$ble.temperature.fahrenheit';
    } else if (bleModelId.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.model_id', '');
      key = 'ble.$ble.model.id';
    } else if (bleBatteryLevel.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.batt', '');
      key = 'ble.$ble.battery.level';
    } else if (bleLuxLevel.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.lux', '');
      key = 'ble.$ble.light.level.lux';
    } else if (bleVoltageLevel.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.volt', '');
      key = 'ble.$ble.voltage';
    } else if (bleRpm.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.rpm', '');
      key = 'ble.$ble.rpm';
    } else if (blePressure.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.press', '');
      key = 'ble.$ble.pressure';
    } else if (bleEventCount.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.counter', '');
      key = 'ble.$ble.event.count';
    } else if (bleXAccel.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.x_acc', '');
      key = 'ble.$ble.acceleration.x';
    } else if (bleYAccel.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.y_acc', '');
      key = 'ble.$ble.acceleration.y';
    } else if (bleZAccel.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.z_acc', '');
      key = 'ble.$ble.acceleration.z';
    } else if (bleMsgCount.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.msg_count', '');
      key = 'ble.$ble.message.count';
    } else if (bleMsg.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.msg', '');
      key = 'ble.$ble.message';
    } else if (bleMagCount.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.mag_counter', '');
      key = 'ble.$ble.magnetic.event.count';
    } else if (bleMagData.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.mag_data', '');
      key = 'ble.$ble.magnetic.data';
    } else if (bleRssi.hasMatch(extraPartParts[0])) {
      final ble = extraPartParts[0].replaceAll('ble.', '').replaceAll('.rssi', '');
      key = 'ble.$ble.rssi.dbm';
    } else if (extraPartParts[0] == 'report') {
      key = 'report.code';
    } else if (extraPartParts[0] == 'confiot_ble') {
      key = 'ble.confiot.connection.status';
    } else if (extraPartParts[0] == 'confiot_serial') {
      key = 'serial.confiot.connection.status';
    } else {
      key = extraPartParts[0];
    }

    if (['true', 't'].contains(extraPartParts[1].toString().toLowerCase())) {
      extra[key] = true;
    } else if (['false', 'f'].contains(extraPartParts[1].toString().toLowerCase())) {
      extra[key] = false;
    } else if (RegExp(r'^-?\d+\.\d+$').hasMatch(extraPartParts[1])) {
      extra[key] = double.tryParse(extraPartParts[1]);
    } else if (RegExp(r'^-?\d+$').hasMatch(extraPartParts[1])) {
      extra[key] = int.tryParse(extraPartParts[1]);
    } else {
      extra[key] = extraPartParts[1];
    }
  }

  return extra;
}