Implementation
static XdrClaimPredicate decode(XdrDataInputStream stream) {
XdrClaimPredicate decoded =
XdrClaimPredicate(XdrClaimPredicateType.decode(stream));
switch (decoded.discriminant) {
case XdrClaimPredicateType.CLAIM_PREDICATE_UNCONDITIONAL:
break;
case XdrClaimPredicateType.CLAIM_PREDICATE_AND:
int predicatesSize = stream.readInt();
List<XdrClaimPredicate> andPredicates =
List<XdrClaimPredicate>.empty(growable: true);
for (int i = 0; i < predicatesSize; i++) {
andPredicates.add(XdrClaimPredicate.decode(stream));
}
decoded.andPredicates = andPredicates;
break;
case XdrClaimPredicateType.CLAIM_PREDICATE_OR:
int predicatesSize = stream.readInt();
List<XdrClaimPredicate> orPredicates =
List<XdrClaimPredicate>.empty(growable: true);
for (int i = 0; i < predicatesSize; i++) {
orPredicates.add(XdrClaimPredicate.decode(stream));
}
decoded.orPredicates = orPredicates;
break;
case XdrClaimPredicateType.CLAIM_PREDICATE_NOT:
int predicatesSize = stream.readInt();
List<XdrClaimPredicate> notPredicates =
List<XdrClaimPredicate>.empty(growable: true);
for (int i = 0; i < predicatesSize; i++) {
notPredicates.add(XdrClaimPredicate.decode(stream));
}
decoded.notPredicate = notPredicates.first;
break;
case XdrClaimPredicateType.CLAIM_PREDICATE_BEFORE_ABSOLUTE_TIME:
decoded.absBefore = XdrInt64.decode(stream);
break;
case XdrClaimPredicateType.CLAIM_PREDICATE_BEFORE_RELATIVE_TIME:
decoded.relBefore = XdrInt64.decode(stream);
break;
}
return decoded;
}