parse static method

Iterable<CoapWebLink> parse(
  1. String linkFormat
)

Parse

Implementation

static Iterable<CoapWebLink> parse(final String linkFormat) {
  final links = <CoapWebLink>[];
  if (linkFormat.isNotEmpty) {
    final scanner = CoapScanner(linkFormat);
    String? path;
    // Scan for paths
    while (scanner.scan(resourceNameRegex)) {
      final matched = scanner.lastMatch!;
      path = matched.group(0);
      path = path!.substring(1, path.length - 1);
      final link = CoapWebLink(path);
      links.add(link);
      // Check for the end of the link format string
      if (scanner.position == linkFormat.length) {
        break;
      }
      // Look for either a path or attribute delimiter
      final char = scanner.readChar();
      if (char == delimiter.codeUnitAt(0)) {
        // Next path
        continue;
      }
      if (char == separator.codeUnitAt(0)) {
        // Process attributes
        var attributeString = scanner.takeUntil(linkStart);

        // Condition the string before splitting
        if (attributeString.endsWith(delimiter)) {
          attributeString =
              attributeString.substring(0, attributeString.length - 1);
        } else {
          attributeString =
              attributeString.substring(0, attributeString.length);
        }
        // Split on delimiter
        final attrs = attributeString.split(separator);
        for (final attr in attrs) {
          final parts = attr.split(attrNameValueSeparator);
          if (parts.length == 1) {
            link.attributes.addNoValue(parts[0]);
          } else {
            link.attributes.add(parts[0], parts[1]);
          }
        }

        // Next path
        continue;
      }
    }
  }
  return links;
}