Search
ctrl/
Ask AI
Light
Dark
System

Client configuration

The client can be configured after initialization via the with_* methods (with_retry_options, with_transaction_options, etc.) that create a shallow copy of the client with adjusted options.

Copy
// Take a schema with matching Rust structs:
//
// module default {
//   type User {
//     required name: str;
//   }
// }

// module test {
//   type User {
//     required name: str;
//   }
// };

// The regular client will query from module 'default' by default
let client = edgedb_tokio::create_client().await?;

// This client will query from module 'test' by default
// The original client is unaffected
let test_client = client.with_default_module(Some("test"));

// Each client queries separately with different behavior
let query = "select User {name};";
let users: Vec<User> = client.query(query, &()).await?;
let test_users: Vec<TestUser> = test_client.query(query, &()).await?;

// Many other clients can be created with different options,
// all independent of the main client:
let transaction_opts = TransactionOptions::default().read_only(true);
let _read_only_client = client
    .with_transaction_options(transaction_opts);

let retry_opts = RetryOptions::default().with_rule(
    RetryCondition::TransactionConflict,
    // No. of retries
    1,
    // Retry immediately, instead of default with increasing backoff
    |_| std::time::Duration::from_millis(0),
);
let _one_immediate_retry_client = client.with_retry_options(retry_opts);