fromNode static method
- IPLDNode node
Creates an IPLDSelector from an IPLDNode
Implementation
static IPLDSelector fromNode(IPLDNode node) {
if (node.kind != Kind.MAP) {
throw IPLDDecodingError('Invalid selector format: expected MAP');
}
final type = SelectorType.values.firstWhere(
(t) =>
t.toString() ==
node.mapValue.entries
.firstWhere((e) => e.key == '.tag')
.value
.stringValue,
orElse: () => throw IPLDDecodingError('Invalid selector type'),
);
return IPLDSelector(
type: type,
criteria:
_decodeValue(
node.mapValue.entries
.firstWhere(
(e) => e.key == 'criteria',
orElse: () => MapEntry()
..key = 'criteria'
..value = (IPLDNode()
..kind = Kind.MAP
..mapValue = IPLDMap()),
)
.value,
)
as Map<String, dynamic>,
maxDepth: node.mapValue.entries
.firstWhere(
(e) => e.key == 'maxDepth',
orElse: () => MapEntry()
..key = 'maxDepth'
..value = (IPLDNode()..kind = Kind.NULL),
)
.value
.intValue
.toInt(),
subSelectors: node.mapValue.entries
.firstWhere(
(e) => e.key == 'selectors',
orElse: () => MapEntry()
..key = 'selectors'
..value = (IPLDNode()
..kind = Kind.LIST
..listValue = IPLDList()),
)
.value
.listValue
.values
.map((n) => fromNode(n))
.toList(),
fieldPath: node.mapValue.entries
.firstWhere(
(e) => e.key == 'path',
orElse: () => MapEntry()
..key = 'path'
..value = (IPLDNode()..kind = Kind.NULL),
)
.value
.stringValue,
stopAtLink: node.mapValue.entries
.firstWhere(
(e) => e.key == 'stopAtLink',
orElse: () => MapEntry()
..key = 'stopAtLink'
..value = (IPLDNode()..kind = Kind.NULL),
)
.value
.boolValue,
);
}