Struct surrealdb::Surreal

source ·
pub struct Surreal<C: Connection> { /* private fields */ }
Expand description

A database client instance for embedded or remote databases

Implementations§

source§

impl Surreal<Any>

source

pub fn connect(&self, address: impl IntoEndpoint) -> Connect<Any, ()>

Connects to a specific database endpoint, saving the connection on the static client

§Examples
use once_cell::sync::Lazy;
use surrealdb::Surreal;
use surrealdb::engine::any::Any;

static DB: Lazy<Surreal<Any>> = Lazy::new(Surreal::init);

DB.connect("ws://localhost:8000").await?;
source§

impl Surreal<Db>

source

pub fn connect<P>( &self, address: impl IntoEndpoint<P, Client = Db>, ) -> Connect<Db, ()>

Connects to a specific database endpoint, saving the connection on the static client

source§

impl Surreal<Client>

source

pub fn connect<P>( &self, address: impl IntoEndpoint<P, Client = Client>, ) -> Connect<Client, ()>

Available on crate feature protocol-http only.

Connects to a specific database endpoint, saving the connection on the static client

§Examples
use once_cell::sync::Lazy;
use surrealdb::Surreal;
use surrealdb::engine::remote::http::Client;
use surrealdb::engine::remote::http::Http;

static DB: Lazy<Surreal<Client>> = Lazy::new(Surreal::init);

DB.connect::<Http>("localhost:8000").await?;
source§

impl Surreal<Client>

source

pub fn connect<P>( &self, address: impl IntoEndpoint<P, Client = Client>, ) -> Connect<Client, ()>

Available on crate feature protocol-ws only.

Connects to a specific database endpoint, saving the connection on the static client

§Examples
use once_cell::sync::Lazy;
use surrealdb::Surreal;
use surrealdb::engine::remote::ws::Client;
use surrealdb::engine::remote::ws::Ws;

static DB: Lazy<Surreal<Client>> = Lazy::new(Surreal::init);

DB.connect::<Ws>("localhost:8000").await?;
source§

impl<C> Surreal<C>
where C: Connection,

source

pub fn init() -> Self

Initialises a new unconnected instance of the client

This makes it easy to create a static singleton of the client. The static singleton pattern in the example below ensures that a single database instance is available across very large or complicated applications. With the singleton, only one connection to the database is instantiated, and the database connection does not have to be shared across components or controllers.

§Examples

Using a static, compile-time scheme

use once_cell::sync::Lazy;
use serde::{Serialize, Deserialize};
use surrealdb::Surreal;
use surrealdb::opt::auth::Root;
use surrealdb::engine::remote::ws::Ws;
use surrealdb::engine::remote::ws::Client;

// Creates a new static instance of the client
static DB: Lazy<Surreal<Client>> = Lazy::new(Surreal::init);

#[derive(Serialize, Deserialize)]
struct Person {
    name: String,
}

#[tokio::main]
async fn main() -> surrealdb::Result<()> {
    // Connect to the database
    DB.connect::<Ws>("localhost:8000").await?;

    // Log into the database
    DB.signin(Root {
        username: "root",
        password: "root",
    }).await?;

    // Select a namespace/database
    DB.use_ns("namespace").use_db("database").await?;

    // Create or update a specific record
    let tobie: Option<Person> = DB.update(("person", "tobie"))
        .content(Person {
            name: "Tobie".into(),
        }).await?;

    Ok(())
}

Using a dynamic, run-time scheme

use once_cell::sync::Lazy;
use serde::{Serialize, Deserialize};
use surrealdb::Surreal;
use surrealdb::engine::any::Any;
use surrealdb::opt::auth::Root;

// Creates a new static instance of the client
static DB: Lazy<Surreal<Any>> = Lazy::new(Surreal::init);

#[derive(Serialize, Deserialize)]
struct Person {
    name: String,
}

#[tokio::main]
async fn main() -> surrealdb::Result<()> {
    // Connect to the database
    DB.connect("ws://localhost:8000").await?;

    // Log into the database
    DB.signin(Root {
        username: "root",
        password: "root",
    }).await?;

    // Select a namespace/database
    DB.use_ns("namespace").use_db("database").await?;

    // Create or update a specific record
    let tobie: Option<Person> = DB.update(("person", "tobie"))
        .content(Person {
            name: "Tobie".into(),
        }).await?;

    Ok(())
}
source

pub fn new<P>(address: impl IntoEndpoint<P, Client = C>) -> Connect<C, Self>

Connects to a local or remote database endpoint

§Examples
use surrealdb::Surreal;
use surrealdb::engine::remote::ws::{Ws, Wss};

// Connect to a local endpoint
let db = Surreal::new::<Ws>("localhost:8000").await?;

// Connect to a remote endpoint
let db = Surreal::new::<Wss>("cloud.surrealdb.com").await?;
source

pub fn use_ns(&self, ns: impl Into<String>) -> UseNs<'_, C>

Switch to a specific namespace

§Examples
db.use_ns("namespace").await?;
source

pub fn use_db(&self, db: impl Into<String>) -> UseDb<'_, C>

Switch to a specific database

§Examples
db.use_db("database").await?;
source

pub fn set(&self, key: impl Into<String>, value: impl Serialize) -> Set<'_, C>

Assigns a value as a parameter for this connection

§Examples
use serde::Serialize;

#[derive(Serialize)]
struct Name {
    first: String,
    last: String,
}

// Assign the variable on the connection
db.set("name", Name {
    first: "Tobie".into(),
    last: "Morgan Hitchcock".into(),
}).await?;

// Use the variable in a subsequent query
db.query("CREATE person SET name = $name").await?;

// Use the variable in a subsequent query
db.query("SELECT * FROM person WHERE name.first = $name.first").await?;
source

pub fn unset(&self, key: impl Into<String>) -> Unset<'_, C>

Removes a parameter from this connection

§Examples
use serde::Serialize;

#[derive(Serialize)]
struct Name {
    first: String,
    last: String,
}

// Assign the variable on the connection
db.set("name", Name {
    first: "Tobie".into(),
    last: "Morgan Hitchcock".into(),
}).await?;

// Use the variable in a subsequent query
db.query("CREATE person SET name = $name").await?;

// Remove the variable from the connection
db.unset("name").await?;
source

pub fn signup<R>( &self, credentials: impl Credentials<Signup, R>, ) -> Signup<'_, C, R>

Signs up a user to a specific authentication scope

§Examples
use serde::Serialize;
use surrealdb::sql;
use surrealdb::opt::auth::Root;
use surrealdb::opt::auth::Scope;

#[derive(Debug, Serialize)]
struct AuthParams {
    email: String,
    password: String,
}

// Sign in as root
db.signin(Root {
    username: "root",
    password: "root",
})
.await?;

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Define the scope
let sql = r#"
    DEFINE SCOPE user_scope SESSION 24h
    SIGNUP ( CREATE user SET email = $email, password = crypto::argon2::generate($password) )
    SIGNIN ( SELECT * FROM user WHERE email = $email AND crypto::argon2::compare(password, $password) )
"#;
db.query(sql).await?.check()?;

// Sign a user up
db.signup(Scope {
    namespace: "namespace",
    database: "database",
    scope: "user_scope",
    params: AuthParams {
        email: "john.doe@example.com".into(),
        password: "password123".into(),
    },
}).await?;
source

pub fn signin<R>( &self, credentials: impl Credentials<Signin, R>, ) -> Signin<'_, C, R>

Signs this connection in to a specific authentication scope

§Examples

Namespace signin

use surrealdb::sql;
use surrealdb::opt::auth::Root;
use surrealdb::opt::auth::Namespace;

// Sign in as root
db.signin(Root {
    username: "root",
    password: "root",
})
.await?;

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Define the user
let sql = "DEFINE USER johndoe ON NAMESPACE PASSWORD 'password123'";
db.query(sql).await?.check()?;

// Sign a user in
db.signin(Namespace {
    namespace: "namespace",
    username: "johndoe",
    password: "password123",
}).await?;

Database signin

use surrealdb::sql;
use surrealdb::opt::auth::Root;
use surrealdb::opt::auth::Database;

// Sign in as root
db.signin(Root {
    username: "root",
    password: "root",
})
.await?;

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Define the user
let sql = "DEFINE USER johndoe ON DATABASE PASSWORD 'password123'";
db.query(sql).await?.check()?;

// Sign a user in
db.signin(Database {
    namespace: "namespace",
    database: "database",
    username: "johndoe",
    password: "password123",
}).await?;

Scope signin

use serde::Serialize;
use surrealdb::opt::auth::Root;
use surrealdb::opt::auth::Scope;

#[derive(Debug, Serialize)]
struct AuthParams {
    email: String,
    password: String,
}

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Sign a user in
db.signin(Scope {
    namespace: "namespace",
    database: "database",
    scope: "user_scope",
    params: AuthParams {
        email: "john.doe@example.com".into(),
        password: "password123".into(),
    },
}).await?;
source

pub fn invalidate(&self) -> Invalidate<'_, C>

Invalidates the authentication for the current connection

§Examples
db.invalidate().await?;
source

pub fn authenticate(&self, token: impl Into<Jwt>) -> Authenticate<'_, C>

Authenticates the current connection with a JWT token

§Examples
db.authenticate(token).await?;
source

pub fn query(&self, query: impl IntoQuery) -> Query<'_, C>

Runs a set of SurrealQL statements against the database

§Examples
use surrealdb::sql;

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Run queries
let mut result = db
    .query("CREATE person")
    .query("SELECT * FROM type::table($table)")
    .bind(("table", "person"))
    .await?;

// Get the first result from the first query
let created: Option<Person> = result.take(0)?;

// Get all of the results from the second query
let people: Vec<Person> = result.take(1)?;

#[derive(serde::Deserialize)]
struct Country {
    name: String
}

// The .take() method can be used for error handling

// If the table has no defined schema, this query will
// create a `country` on the SurrealDB side, but...
let mut result = db
    .query("CREATE country")
    .await?;

// It won't deserialize into a Country struct
if let Err(e) = result.take::<Option<Country>>(0) {
    println!("Failed to make a country: {e:#?}");
    assert!(e.to_string().contains("missing field `name`"));
}
source

pub fn select<R>(&self, resource: impl IntoResource<R>) -> Select<'_, C, R>

Selects all records in a table, or a specific record

§Examples
// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Select all records from a table
let people: Vec<Person> = db.select("person").await?;

// Select a range of records from a table
let people: Vec<Person> = db.select("person").range("jane".."john").await?;

// Select a specific record from a table
let person: Option<Person> = db.select(("person", "h5wxrf2ewk8xjxosxtyc")).await?;

// To listen for updates as they happen on a record, a range of records
// or entire table use a live query. This is done by simply calling `.live()`
// after this method. That gives you a stream of notifications you can listen on.
let mut stream = db.select(resource).live().await?;

while let Some(notification) = stream.next().await {
    // Use the notification
}
source

pub fn create<R>(&self, resource: impl IntoResource<R>) -> Create<'_, C, R>

Creates a record in the database

§Examples
use serde::Serialize;

#[derive(Serialize)]
struct Settings {
    active: bool,
    marketing: bool,
}

#[derive(Serialize)]
struct User {
    name: &'static str,
    settings: Settings,
}

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Create a record with a random ID
let person: Vec<Person> = db.create("person").await?;

// Create a record with a specific ID
let record: Option<Person> = db.create(("person", "tobie"))
    .content(User {
        name: "Tobie",
        settings: Settings {
            active: true,
            marketing: true,
        },
    })
    .await?;
source

pub fn insert<R>(&self, resource: impl IntoResource<R>) -> Insert<'_, C, R>

Insert a record or records into a table

§Examples
use serde::Serialize;
use surrealdb::sql;

#[derive(Serialize)]
struct Settings {
    active: bool,
    marketing: bool,
}

#[derive(Serialize)]
struct User<'a> {
    name: &'a str,
    settings: Settings,
}

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Insert a record with a specific ID
let person: Option<Person> = db.insert(("person", "tobie"))
    .content(User {
        name: "Tobie",
        settings: Settings {
            active: true,
            marketing: true,
        },
    })
    .await?;

// Insert multiple records into the table
let people: Vec<Person> = db.insert("person")
    .content(vec![
        User {
            name: "Tobie",
            settings: Settings {
                active: true,
                marketing: false,
            },
        },
        User {
            name: "Jaime",
            settings: Settings {
                active: true,
                marketing: true,
            },
        },
    ])
    .await?;

// Insert multiple records with pre-defined IDs
#[derive(Serialize)]
struct UserWithId<'a> {
    id: sql::Thing,
    name: &'a str,
    settings: Settings,
}

let people: Vec<Person> = db.insert("person")
    .content(vec![
        UserWithId {
            id: sql::thing("person:tobie")?,
            name: "Tobie",
            settings: Settings {
                active: true,
                marketing: false,
            },
        },
        UserWithId {
            id: sql::thing("person:jaime")?,
            name: "Jaime",
            settings: Settings {
                active: true,
                marketing: true,
            },
        },
    ])
    .await?;
source

pub fn update<R>(&self, resource: impl IntoResource<R>) -> Update<'_, C, R>

Updates all records in a table, or a specific record

§Examples

Replace the current document / record data with the specified data.

use serde::Serialize;

#[derive(Serialize)]
struct Settings {
    active: bool,
    marketing: bool,
}

#[derive(Serialize)]
struct User {
    name: &'static str,
    settings: Settings,
}

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Update all records in a table
let people: Vec<Person> = db.update("person").await?;

// Update a record with a specific ID
let person: Option<Person> = db.update(("person", "tobie"))
    .content(User {
        name: "Tobie",
        settings: Settings {
            active: true,
            marketing: true,
        },
    })
    .await?;

Merge the current document / record data with the specified data.

use serde::Serialize;
use time::OffsetDateTime;

#[derive(Serialize)]
struct UpdatedAt {
    updated_at: OffsetDateTime,
}

#[derive(Serialize)]
struct Settings {
    active: bool,
}

#[derive(Serialize)]
struct User {
    updated_at: OffsetDateTime,
    settings: Settings,
}

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Update all records in a table
let people: Vec<Person> = db.update("person")
    .merge(UpdatedAt {
        updated_at: OffsetDateTime::now_utc(),
    })
    .await?;

// Update a record with a specific ID
let person: Option<Person> = db.update(("person", "tobie"))
    .merge(User {
        updated_at: OffsetDateTime::now_utc(),
        settings: Settings {
            active: true,
        },
    })
    .await?;

Apply JSON Patch changes to all records, or a specific record, in the database.

use serde::Serialize;
use surrealdb::opt::PatchOp;
use time::OffsetDateTime;

#[derive(Serialize)]
struct UpdatedAt {
    updated_at: OffsetDateTime,
}

#[derive(Serialize)]
struct Settings {
    active: bool,
}

#[derive(Serialize)]
struct User {
    updated_at: OffsetDateTime,
    settings: Settings,
}

// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Update all records in a table
let people: Vec<Person> = db.update("person")
    .patch(PatchOp::replace("/created_at", OffsetDateTime::now_utc()))
    .await?;

// Update a record with a specific ID
let person: Option<Person> = db.update(("person", "tobie"))
    .patch(PatchOp::replace("/settings/active", false))
    .patch(PatchOp::add("/tags", ["developer", "engineer"]))
    .patch(PatchOp::remove("/temp"))
    .await?;
source

pub fn delete<R>(&self, resource: impl IntoResource<R>) -> Delete<'_, C, R>

Deletes all records, or a specific record

§Examples
// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Delete all records from a table
let people: Vec<Person> = db.delete("person").await?;

// Delete a specific record from a table
let person: Option<Person> = db.delete(("person", "h5wxrf2ewk8xjxosxtyc")).await?;
source

pub fn version(&self) -> Version<'_, C>

Returns the version of the server

§Examples
let version = db.version().await?;
source

pub fn health(&self) -> Health<'_, C>

Checks whether the server is healthy or not

§Examples
db.health().await?;
source

pub async fn wait_for(&self, event: WaitFor)

Wait for the selected event to happen before proceeding

source

pub fn export<R>( &self, target: impl IntoExportDestination<R>, ) -> Export<'_, C, R>

Dumps the database contents to a file

§Support

Currently only supported by HTTP and the local engines. Not supported on WebAssembly.

§Examples
// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

// Export to a file
db.export("backup.sql").await?;

// Export to a stream of bytes
let mut backup = db.export(()).await?;
while let Some(result) = backup.next().await {
    match result {
        Ok(bytes) => {
            // Do something with the bytes received...
        }
        Err(error) => {
            // Handle the export error
        }
    }
}
source

pub fn import<P>(&self, file: P) -> Import<'_, C>
where P: AsRef<Path>,

Restores the database from a file

§Support

Currently only supported by HTTP and the local engines. Not supported on WebAssembly.

§Examples
// Select the namespace/database to use
db.use_ns("namespace").use_db("database").await?;

db.import("backup.sql").await?;

Trait Implementations§

source§

impl<C> Clone for Surreal<C>
where C: Connection,

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<C> Debug for Surreal<C>
where C: Connection,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<C> Freeze for Surreal<C>

§

impl<C> !RefUnwindSafe for Surreal<C>

§

impl<C> Send for Surreal<C>

§

impl<C> Sync for Surreal<C>

§

impl<C> Unpin for Surreal<C>
where C: Unpin,

§

impl<C> !UnwindSafe for Surreal<C>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

source§

fn is_within(&self, b: &G2) -> bool

source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

source§

fn is_within(&self, b: &G2) -> bool

source§

impl<T> ParallelSend for T
where T: Send,