Implementation
static XdrSCObject decode(XdrDataInputStream stream) {
XdrSCObject decoded = XdrSCObject(XdrSCObjectType.decode(stream));
switch (decoded.discriminant) {
case XdrSCObjectType.SCO_VEC:
int vecSize = stream.readInt();
decoded.vec = List<XdrSCVal>.empty(growable: true);
for (int i = 0; i < vecSize; i++) {
decoded.vec!.add(XdrSCVal.decode(stream));
}
break;
case XdrSCObjectType.SCO_MAP:
int mapSize = stream.readInt();
decoded.map = List<XdrSCMapEntry>.empty(growable: true);
for (int i = 0; i < mapSize; i++) {
decoded.map!.add(XdrSCMapEntry.decode(stream));
}
break;
case XdrSCObjectType.SCO_U64:
decoded.u64 = XdrUint64.decode(stream);
break;
case XdrSCObjectType.SCO_I64:
decoded.i64 = XdrInt64.decode(stream);
break;
case XdrSCObjectType.SCO_U128:
decoded.u128 = XdrInt128Parts.decode(stream);
break;
case XdrSCObjectType.SCO_I128:
decoded.i128 = XdrInt128Parts.decode(stream);
break;
case XdrSCObjectType.SCO_BYTES:
decoded.bin = XdrDataValue.decode(stream);
break;
case XdrSCObjectType.SCO_CONTRACT_CODE:
decoded.contractCode = XdrSCContractCode.decode(stream);
break;
case XdrSCObjectType.SCO_ACCOUNT_ID:
decoded.accountID = XdrAccountID.decode(stream);
break;
}
return decoded;
}