tryParseUri static method
Implementation
static Urn? tryParseUri(Uri uri) {
if (uri.scheme != schemeName) {
throw ArgumentError.value(uri, 'uri', 'Not a URN');
}
var match = RegExp('^(?<nid>$_nid):(?<nss>$_nss)\$').firstMatch(uri.path);
if (match == null) {
return null;
}
var nid = match.namedGroup('nid');
var nss = match.namedGroup('nss');
if (nid == null || nss == null) {
return null;
}
var query = '?${uri.query}';
var rqComponentsMatch = RegExp(
'(\\?\\+$_rComponent)?'
'(\\?\\=$_qComponent)?',
).firstMatch(query);
Map<String, String> qMap = {};
String rcomponent = '';
if (rqComponentsMatch != null) {
rcomponent = rqComponentsMatch.namedGroup('rcomponent') ?? '';
qMap = _parseQComponent(rqComponentsMatch.namedGroup('qcomponent') ?? '');
}
return Urn(
nid: nid,
nss: nss,
qComponents: qMap,
rComponent: rcomponent,
fragment: uri.fragment,
);
}