/// <summary>
 /// Constructs an instance of <see cref="DatastoreClientImpl"/> with the given arguments.
 /// Clients using the <see cref="DatastoreDb"/> abstraction layer would normally call
 /// <see cref="DatastoreDb.BeginTransaction(CallSettings)"/> or <see cref="DatastoreDb.BeginTransactionAsync(CallSettings)"/>
 /// instead of calling this method directly.
 /// </summary>
 /// <param name="client">The client to use for Datastore operations. Must not be null.</param>
 /// <param name="projectId">The ID of the project of the Datastore operations. Must not be null.</param>
 /// <param name="namespaceId">The ID of the namespace which is combined with <paramref name="projectId"/> to form a partition ID
 /// to use in query operations. May be null.</param>
 /// <param name="transactionId">The transaction obtained by an earlier <see cref="DatastoreClient.BeginTransaction(string, CallSettings)"/>
 /// or the asynchronous equivalent. Must not be null</param>
 /// <returns>A <see cref="DatastoreTransaction"/> representation of the specified transaction.</returns>
 public static DatastoreTransaction Create(DatastoreClient client, string projectId, string namespaceId, ByteString transactionId)
 => new DatastoreTransactionImpl(client, projectId, namespaceId, transactionId);