callArgToGrpcInput function

Input callArgToGrpcInput(
  1. Map<String, dynamic> arg
)

Implementation

Input callArgToGrpcInput(Map<String, dynamic> arg) {
  switch (arg['\$kind']) {
    case 'Pure':
      return Input(kind: Input_InputKind.PURE, pure: base64Decode(arg['Pure']['bytes']));
    case 'Object':
      final obj = arg['Object'];
      switch (obj['\$kind']) {
        case 'ImmOrOwnedObject':
          return Input(
            kind: Input_InputKind.IMMUTABLE_OR_OWNED,
            objectId: obj['ImmOrOwnedObject']['objectId'],
            version: Int64.parseRadix(obj['ImmOrOwnedObject']['version'].toString(), 10),
            digest: obj['ImmOrOwnedObject']['digest'],
          );

        case 'SharedObject':
          return Input(
            kind: Input_InputKind.SHARED,
            objectId: obj['SharedObject']['objectId'],
            version: Int64.parseRadix(obj['SharedObject']['initialSharedVersion'].toString(), 10),
            mutable: obj['SharedObject']['mutable'],
          );

        case 'Receiving':
          return Input(
            kind: Input_InputKind.RECEIVING,
            objectId: obj['Receiving']['objectId'],
            version: Int64.parseRadix(obj['Receiving']['version'].toString(), 10),
            digest: obj['Receiving']['digest'],
          );
      }
      throw Exception("Unknown object kind: $obj");

    case 'UnresolvedObject':
      final u = arg['UnresolvedObject'];
      return Input(
        objectId: u['objectId'],
        version: u['version'] != null
            ? Int64.parseRadix(u['version'].toString(), 10)
            : u['initialSharedVersion'] != null
            ? Int64.parseRadix(u['initialSharedVersion'].toString(), 10)
            : null,
        digest: u['digest'],
        mutable: u['mutable'],
      );
    case 'UnresolvedPure':
      throw Exception("UnresolvedPure must be resolved before converting to gRPC");
    case 'FundsWithdrawal':
      final withdrawal = arg['FundsWithdrawal'];

      return Input(
        kind: Input_InputKind.FUNDS_WITHDRAWAL,
        fundsWithdrawal: .new(
          amount: withdrawal['reservation']['\$kind'] == 'MaxAmountU64'
              ? Int64.parseRadix(withdrawal['reservation']['MaxAmountU64'], 10)
              : null,
          coinType: withdrawal['typeArg']['\$kind'] == 'Balance'
              ? withdrawal['typeArg']['Balance']
              : null,
          source: withdrawal['withdrawFrom']['\$kind'] == 'Sponsor' ? .SPONSOR : .SENDER,
        ),
      );
    default:
      throw Exception("Unknown CallArg: $arg");
  }
}