commandToGrpcCommand function

Command commandToGrpcCommand(
  1. Map cmd
)

Implementation

grpc_transaction.Command commandToGrpcCommand(Map<dynamic, dynamic> cmd) {
  switch (cmd['\$kind']) {
    case 'MoveCall':
      return grpc_transaction.Command(
        moveCall: (grpc_transaction.MoveCall(
          package: cmd['MoveCall']['package'],
          module: cmd['MoveCall']['module'],
          function: cmd['MoveCall']['function'],
          // Commands.moveCall stores typeArguments in an untyped list
          // (`List<dynamic>`), so cast here to satisfy proto's
          // `Iterable<String>?` — avoids a runtime type error for move
          // calls that take no type parameters.
          typeArguments: (cmd['MoveCall']['typeArguments'] as List?)?.cast<String>(),
          arguments: toIterableGrpcArguments(cmd['MoveCall']['arguments']),
        )),
      );

    case 'TransferObjects':
      return grpc_transaction.Command(
        transferObjects: grpc_transaction.TransferObjects(
          objects: toIterableGrpcArguments(cmd['TransferObjects']?['objects']),
          address: toIterableGrpcArguments([(cmd['TransferObjects']['address'])])[0],
        ),
      );

    case 'SplitCoins':
      return grpc_transaction.Command(
        splitCoins: grpc_transaction.SplitCoins(
          coin: toIterableGrpcArguments([cmd['SplitCoins']['coin']])[0],
          amounts: toIterableGrpcArguments(cmd['SplitCoins']['amounts']),
        ),
      );

    case 'MergeCoins':
      return grpc_transaction.Command(
        mergeCoins: grpc_transaction.MergeCoins(
          coin: toIterableGrpcArguments([cmd['MergeCoins']['destination']])[0],
          coinsToMerge: toIterableGrpcArguments(cmd['MergeCoins']['sources']),
        ),
      );

    case 'Publish':
      return grpc_transaction.Command(
        publish: grpc_transaction.Publish(
          modules: cmd['Publish']['modules']
              .map<Uint8List>((module) => base64Decode(module as String))
              .toList(),
          dependencies: List.from(cmd['Publish']['dependencies'] ?? []),
        ),
      );

    case 'MakeMoveVec':
      return grpc_transaction.Command(
        makeMoveVector: (grpc_transaction.MakeMoveVector(
          elementType: cmd['MakeMoveVec']['type'],
          elements: toIterableGrpcArguments(cmd['MakeMoveVec']['elements']),
        )),
      );

    case 'Upgrade':
      return grpc_transaction.Command(
        upgrade: grpc_transaction.Upgrade(
          // modules are base64-encoded strings in internal format
          modules: cmd['Upgrade']['modules']
              .map<Uint8List>((module) => base64Decode(module as String))
              .toList(),
          dependencies: List.from(cmd['Upgrade']['dependencies'] ?? []),
          package: cmd['Upgrade']['package'],
          ticket: toIterableGrpcArguments([cmd['Upgrade']['ticket']])[0],
        ),
      );

    default:
      throw Exception("Unknown Command kind: $cmd");
  }
}