parse static method
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;
}