decode static method

XdrSCVal decode(
  1. XdrDataInputStream stream
)

Implementation

static XdrSCVal decode(XdrDataInputStream stream) {
  XdrSCVal decoded = XdrSCVal(XdrSCValType.decode(stream));
  switch (decoded.discriminant) {
    case XdrSCValType.SCV_BOOL:
      decoded.b = stream.readBoolean();
      break;
    case XdrSCValType.SCV_VOID:
      break;
    case XdrSCValType.SCV_ERROR:
      decoded.error = XdrSCError.decode(stream);
      break;
    case XdrSCValType.SCV_U32:
      decoded.u32 = XdrUint32.decode(stream);
      break;
    case XdrSCValType.SCV_I32:
      decoded.i32 = XdrInt32.decode(stream);
      break;
    case XdrSCValType.SCV_U64:
      decoded.u64 = XdrUint64.decode(stream);
      break;
    case XdrSCValType.SCV_I64:
      decoded.i64 = XdrInt64.decode(stream);
      break;
    case XdrSCValType.SCV_TIMEPOINT:
      decoded.timepoint = XdrUint64.decode(stream);
      break;
    case XdrSCValType.SCV_DURATION:
      decoded.duration = XdrUint64.decode(stream);
      break;
    case XdrSCValType.SCV_U128:
      decoded.u128 = XdrUInt128Parts.decode(stream);
      break;
    case XdrSCValType.SCV_I128:
      decoded.i128 = XdrInt128Parts.decode(stream);
      break;
    case XdrSCValType.SCV_U256:
      decoded.u256 = XdrUInt256Parts.decode(stream);
      break;
    case XdrSCValType.SCV_I256:
      decoded.i256 = XdrInt256Parts.decode(stream);
      break;
    case XdrSCValType.SCV_BYTES:
      decoded.bytes = XdrDataValue.decode(stream);
      break;
    case XdrSCValType.SCV_STRING:
      decoded.str = stream.readString();
      break;
    case XdrSCValType.SCV_SYMBOL:
      decoded.sym = stream.readString();
      break;
    case XdrSCValType.SCV_VEC:
      int vecPresent = stream.readInt();
      if (vecPresent != 0) {
        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 XdrSCValType.SCV_MAP:
      int mapPresent = stream.readInt();
      if (mapPresent != 0) {
        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 XdrSCValType.SCV_ADDRESS:
      decoded.address = XdrSCAddress.decode(stream);
      break;
    case XdrSCValType.SCV_LEDGER_KEY_CONTRACT_INSTANCE:
      break;
    case XdrSCValType.SCV_LEDGER_KEY_NONCE:
      decoded.nonce_key = XdrSCNonceKey.decode(stream);
      break;
    case XdrSCValType.SCV_CONTRACT_INSTANCE:
      decoded.instance = XdrSCContractInstance.decode(stream);
      break;
  }
  return decoded;
}