setMultipleCredentials method

void setMultipleCredentials(
  1. List<SyncCredentials> credentials
)

Like setCredentials, but accepts multiple credentials.

However, does not support SyncCredentials.none().

Implementation

void setMultipleCredentials(List<SyncCredentials> credentials) {
  if (credentials.isEmpty) {
    throw ArgumentError.value(
        credentials, "credentials", "Provide at least one credential");
  }

  var length = credentials.length;
  for (int i = 0; i < length; i++) {
    final isLast = i + 1 == length;
    var credential = credentials[i];

    if (credential is _SyncCredentialsNone) {
      throw ArgumentError.value(credentials, "credentials",
          "SyncCredentials.none() is not supported, use setCredentials() instead");
    }

    try {
      if (credential is _SyncCredentialsUserPassword) {
        withNativeString(
            credential._user,
            (userCStr) => withNativeString(
                credential._password,
                (passwordCStr) => checkObx(
                    C.sync_credentials_add_user_password(_ptr,
                        credential._type, userCStr, passwordCStr, isLast))));
      } else if (credential is SyncCredentialsSecret) {
        withNativeBytes(
            credential.data,
            (Pointer<Uint8> credsPtr, int credsSize) => checkObx(
                C.sync_credentials_add(
                    _ptr, credential._type, credsPtr, credsSize, isLast)));
      }
    } catch (e) {
      // To make exceptions related to a credential easier to attribute,
      // wrap in an ArgumentError and give the position in the list.
      if (e is StateError) {
        // State errors should not be specific to a credential, so rethrow
        rethrow;
      } else {
        throw ArgumentError.value(credential, "credentials[$i]", "$e");
      }
    }
  }
}