1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
//! EdgeDB client for Tokio
//!
//! Main way to use EdgeDB bindings is to use [`Client`]. It encompasses
//! connection pool to the database that is transparent for user. Individual
//! queries can be made via methods on the client. Correlated queries are done
//! via [transactions](Client::transaction)
//!
//! To create client, use [`create_client`] function (it gets database
//! connection configuration from environment). You can also use [`Builder`]
//! to [`build`](`Builder::build`) custom [`Config`] and [create a
//! client](Client::new) using that config.
//!
//! # Example
//!
//! ```rust,no_run
//! #[tokio::main]
//! async fn main() -> anyhow::Result<()> {
//! let conn = edgedb_tokio::create_client().await?;
//! let val = conn.query_required_single::<i64, _>(
//! "SELECT 7*8",
//! &(),
//! ).await?;
//! println!("7*8 is: {}", val);
//! Ok(())
//! }
//! ```
//! More [examples on github](https://github.com/edgedb/edgedb-rust/tree/master/edgedb-tokio/examples)
#![cfg_attr(not(feature="unstable"),
warn(missing_docs, missing_debug_implementations))]
#[cfg(feature="unstable")]
pub mod raw;
#[cfg(feature="unstable")]
pub mod server_params;
#[cfg(feature="unstable")]
pub mod credentials;
#[cfg(feature="unstable")]
pub mod tls;
#[cfg(not(feature="unstable"))]
mod raw;
#[cfg(not(feature="unstable"))]
mod server_params;
#[cfg(not(feature="unstable"))]
mod credentials;
#[cfg(not(feature="unstable"))]
mod tls;
mod builder;
mod client;
mod errors;
mod options;
mod sealed;
pub mod state;
mod transaction;
pub use edgedb_derive::{Queryable, GlobalsDelta, ConfigDelta};
pub use builder::{Builder, Config, InstanceName, ClientSecurity};
pub use credentials::TlsSecurity;
pub use client::Client;
pub use errors::Error;
pub use options::{TransactionOptions, RetryOptions, RetryCondition};
pub use state::{GlobalsDelta, ConfigDelta};
pub use transaction::{Transaction};
#[cfg(feature="unstable")]
pub use builder::get_project_dir;
/// Create a connection to the database with default parameters
///
/// It's expected that connection parameters are set up using environment
/// (either environment variables or project configuration in `edgedb.toml`)
/// so no configuration is specified here.
///
/// This method tries to esablish single connection immediately to
/// ensure that configuration is valid and will error out otherwise.
///
/// For more fine-grained setup see [`Client`] and [`Builder`] documentation
/// and the source of this function.
#[cfg(feature="env")]
pub async fn create_client() -> Result<Client, Error> {
let pool = Client::new(&Builder::new().build_env().await?);
pool.ensure_connected().await?;
Ok(pool)
}