From 0e17fe0e3f9da8d040a7cd8c4de5cfc94e0353c2 Mon Sep 17 00:00:00 2001 From: Rushmore Mushambi Date: Wed, 9 Oct 2024 17:47:13 +0100 Subject: [PATCH] Update Rust examples --- src/content/doc-sdk-rust/methods/create.mdx | 10 ++--- src/content/doc-sdk-rust/methods/delete.mdx | 19 +++++---- src/content/doc-sdk-rust/methods/export.mdx | 21 ++-------- src/content/doc-sdk-rust/methods/import.mdx | 2 +- src/content/doc-sdk-rust/methods/init.mdx | 19 ++++----- src/content/doc-sdk-rust/methods/insert.mdx | 42 +++++++++---------- src/content/doc-sdk-rust/methods/select.mdx | 11 ++--- .../doc-sdk-rust/methods/select_live.mdx | 4 +- src/content/doc-sdk-rust/methods/upsert.mdx | 4 +- 9 files changed, 60 insertions(+), 72 deletions(-) diff --git a/src/content/doc-sdk-rust/methods/create.mdx b/src/content/doc-sdk-rust/methods/create.mdx index 3768374fc..04f30f968 100644 --- a/src/content/doc-sdk-rust/methods/create.mdx +++ b/src/content/doc-sdk-rust/methods/create.mdx @@ -46,6 +46,10 @@ db.create(resource).content(data) ### Example usage ```rust +use serde::{Deserialize, Serialize}; +use surrealdb::engine::any::connect; +use surrealdb::RecordId; + #[derive(Debug, Serialize, Deserialize)] struct Person { name: Option, @@ -54,13 +58,9 @@ struct Person { #[derive(Debug, Deserialize)] struct Record { - id: Thing, + id: RecordId, } -use serde::{Deserialize, Serialize}; -use surrealdb::engine::any::connect; -use surrealdb::sql::Thing; - #[tokio::main] async fn main() -> surrealdb::Result<()> { let db = connect("ws://localhost:8000").await?; diff --git a/src/content/doc-sdk-rust/methods/delete.mdx b/src/content/doc-sdk-rust/methods/delete.mdx index 958a93eec..ebefb73c4 100644 --- a/src/content/doc-sdk-rust/methods/delete.mdx +++ b/src/content/doc-sdk-rust/methods/delete.mdx @@ -36,28 +36,29 @@ db.delete(resource) ### Example usage ```rust +use serde::{Deserialize, Serialize}; +use surrealdb::engine::any::connect; +use surrealdb::opt::Resource; +use surrealdb::RecordId; + #[derive(Debug, Serialize, Deserialize)] struct Person { - id: Thing, + id: RecordId, } -use serde::{Deserialize, Serialize}; -use surrealdb::engine::any::connect; -use surrealdb::sql::Thing; - #[tokio::main] async fn main() -> surrealdb::Result<()> { let db = connect("ws://localhost:8000").await?; db.use_ns("ns").use_db("db").await?; // Create three `person` records - let _: Option = db.create(("person", "one")).await?; - let _: Option = db.create(("person", "two")).await?; - let _: Option = db.create(("person", "three")).await?; + db.create(Resource::from(("person", "one"))).await?; + db.create(Resource::from(("person", "two"))).await?; + db.create(Resource::from(("person", "three"))).await?; let deleted_one: Option = db.delete(("person", "one")).await?; - let deleted_rest: Vec = db.delete("person").await?; dbg!(deleted_one); + let deleted_rest: Vec = db.delete("person").await?; dbg!(deleted_rest); Ok(()) } diff --git a/src/content/doc-sdk-rust/methods/export.mdx b/src/content/doc-sdk-rust/methods/export.mdx index b9d55169c..f1067103c 100644 --- a/src/content/doc-sdk-rust/methods/export.mdx +++ b/src/content/doc-sdk-rust/methods/export.mdx @@ -42,14 +42,8 @@ db.export(target) The `.export()` method can be used to save the contents of a database to a file. ```rust -#[derive(Debug, Serialize, Deserialize)] -struct Person { - id: Thing, -} - -use serde::{Deserialize, Serialize}; use surrealdb::engine::any::connect; -use surrealdb::sql::Thing; +use surrealdb::opt::Resource; #[tokio::main] async fn main() -> surrealdb::Result<()> { @@ -57,26 +51,19 @@ async fn main() -> surrealdb::Result<()> { db.use_ns("ns").use_db("db").await?; // Create a `person` record - let _: Option = db.create("person").await?; + db.create(Resource::from("person")).await?; db.export("backup.surql").await?; Ok(()) } - ``` If an empty tuple is passed in for the file name, the `.export()` method will instead return an async stream of bytes. ```rust -#[derive(Debug, Serialize, Deserialize)] -struct Person { - id: Thing, -} - use futures::StreamExt; -use serde::{Deserialize, Serialize}; use surrealdb::engine::any::connect; -use surrealdb::sql::Thing; +use surrealdb::opt::Resource; #[tokio::main] async fn main() -> surrealdb::Result<()> { @@ -84,7 +71,7 @@ async fn main() -> surrealdb::Result<()> { db.use_ns("ns").use_db("db").await?; // Create a `person` record - let _: Option = db.create("person").await?; + db.create(Resource::from("person")).await?; let mut stream = db.export(()).await?; diff --git a/src/content/doc-sdk-rust/methods/import.mdx b/src/content/doc-sdk-rust/methods/import.mdx index 55a5bd950..599ddd20e 100644 --- a/src/content/doc-sdk-rust/methods/import.mdx +++ b/src/content/doc-sdk-rust/methods/import.mdx @@ -13,7 +13,7 @@ Restores the database from a file. > WebSocket connections currently do not currently support exports and imports. Be sure to use an HTTP endpoint when using this method. ```rust title="Method Syntax" -db.authenticate(token) +db.import(source) ``` ### Example usage diff --git a/src/content/doc-sdk-rust/methods/init.mdx b/src/content/doc-sdk-rust/methods/init.mdx index 982d7f55e..74374f571 100644 --- a/src/content/doc-sdk-rust/methods/init.mdx +++ b/src/content/doc-sdk-rust/methods/init.mdx @@ -16,14 +16,16 @@ Surreal::init() ### Example usage ```rust +use std::sync::LazyLock; use surrealdb::engine::remote::ws::{Client, Ws}; use surrealdb::Surreal; +static DB: LazyLock> = LazyLock::new(Surreal::init); + #[tokio::main] async fn main() -> surrealdb::Result<()> { - let db: Surreal = Surreal::init(); // Connect to the database - db.connect::("127.0.0.1:8000").await?; + DB.connect::("127.0.0.1:8000").await?; Ok(()) } ``` @@ -32,19 +34,16 @@ async fn main() -> surrealdb::Result<()> { ```rust use std::env; - +use std::sync::LazyLock; use surrealdb::engine::any::Any; use surrealdb::Surreal; +static DB: LazyLock> = LazyLock::new(Surreal::init); + #[tokio::main] async fn main() -> surrealdb::Result<()> { - let db: Surreal = Surreal::init(); - - if let Ok(path) = env::var("DB_ENDPOINT") { - db.connect(path).await?; - } else { - db.connect("mem://").await?; - }; + let endpoint = env::var("DB_ENDPOINT").unwrap_or_else(|_| "mem://".to_owned()); + DB.connect(endpoint).await?; Ok(()) } ``` \ No newline at end of file diff --git a/src/content/doc-sdk-rust/methods/insert.mdx b/src/content/doc-sdk-rust/methods/insert.mdx index ed4073247..62375b755 100644 --- a/src/content/doc-sdk-rust/methods/insert.mdx +++ b/src/content/doc-sdk-rust/methods/insert.mdx @@ -55,7 +55,7 @@ Inserting a record with a specific ID: ```rust se serde::{Deserialize, Serialize}; -use surrealdb::{engine::any::connect, sql::Thing}; +use surrealdb::engine::any::connect; #[derive(Debug, Serialize, Deserialize)] struct Settings { @@ -73,7 +73,6 @@ struct Data<'a> { struct Person { name: String, settings: Settings, - id: Thing, } #[tokio::main] @@ -101,7 +100,7 @@ Inserting multiple records into a table: ```rust use serde::{Deserialize, Serialize}; -use surrealdb::{engine::any::connect, sql::Thing}; +use surrealdb::engine::any::connect; #[derive(Debug, Serialize, Deserialize)] struct Settings { @@ -119,7 +118,6 @@ struct Data<'a> { struct Person { name: String, settings: Settings, - id: Thing, } #[tokio::main] @@ -156,7 +154,8 @@ The `.insert()` method can take an empty tuple instead of a table ID if the foll ```rust use serde::{Deserialize, Serialize}; -use surrealdb::{engine::any::connect, sql, sql::Thing}; +use surrealdb::engine::any::connect; +use surrealdb::RecordId; #[derive(Debug, Serialize, Deserialize)] struct Settings { @@ -166,14 +165,14 @@ struct Settings { #[derive(Serialize)] struct Data<'a> { - id: Thing, + id: RecordId, name: &'a str, } #[derive(Debug, Deserialize)] struct Person { name: String, - id: Thing, + id: RecordId, } #[tokio::main] @@ -186,11 +185,11 @@ async fn main() -> surrealdb::Result<()> { .insert(()) .content(vec![ Data { - id: sql::thing("person:tobie")?, + id: RecordId::from(("person", "tobie")), name: "Tobie", }, Data { - id: sql::thing("person:jaime")?, + id: RecordId::from(("person", "jaime")), name: "Jaime", }, ]) @@ -204,7 +203,8 @@ An example of two `person` records and one `company` record, followed by `.inser ```rust use serde::{Deserialize, Serialize}; -use surrealdb::{engine::any::connect, sql, sql::Thing}; +use surrealdb::engine::any::connect; +use surrealdb::RecordId; #[derive(Debug, Serialize, Deserialize)] struct Settings { @@ -214,22 +214,22 @@ struct Settings { #[derive(Serialize)] struct Data<'a> { - id: Thing, + id: RecordId, name: &'a str, } #[derive(Debug, Deserialize)] struct Record { name: String, - id: Thing, + id: RecordId, } #[derive(Debug, Serialize, Deserialize)] struct Founded { #[serde(rename = "in")] - founder: Thing, + founder: RecordId, #[serde(rename = "out")] - company: Thing, + company: RecordId, } #[tokio::main] @@ -242,15 +242,15 @@ async fn main() -> surrealdb::Result<()> { .insert(()) .content(vec![ Data { - id: sql::thing("person:tobie")?, + id: RecordId::from(("person", "tobie")), name: "Tobie", }, Data { - id: sql::thing("person:jaime")?, + id: RecordId::from(("person", "jaime")), name: "Jaime", }, Data { - id: sql::thing("company:surrealdb")?, + id: RecordId::from(("company", "surrealdb")), name: "SurrealDB", }, ]) @@ -261,12 +261,12 @@ async fn main() -> surrealdb::Result<()> { .insert("founded") .relation(vec![ Founded { - founder: sql::thing("person:tobie")?, - company: sql::thing("company:surrealdb")?, + founder: RecordId::from(("person", "tobie")), + company: RecordId::from(("company", "surrealdb")), }, Founded { - founder: sql::thing("person:jaime")?, - company: sql::thing("company:surrealdb")?, + founder: RecordId::from(("person", "jaime")), + company: RecordId::from(("company", "surrealdb")), }, ]) .await?; diff --git a/src/content/doc-sdk-rust/methods/select.mdx b/src/content/doc-sdk-rust/methods/select.mdx index 74dff4fc1..8a60a5a41 100644 --- a/src/content/doc-sdk-rust/methods/select.mdx +++ b/src/content/doc-sdk-rust/methods/select.mdx @@ -49,18 +49,19 @@ let person: Option = db.select(("person", "h5wxrf2ewk8xjxosxtyc")).await use serde::Deserialize; use surrealdb::engine::remote::ws::Ws; use surrealdb::opt::auth::Root; -use surrealdb::sql::Id; +use surrealdb::RecordId; +use surrealdb::RecordIdKey; use surrealdb::Surreal; -// defining your own custom Thing struct and using that in place of `Thing` in the `Id` struct +// Defining your own custom RecordId struct and using that in place of `RecordId` #[derive(Debug, Deserialize)] -struct CustomThing { - id: Id, +struct CustomRecordId { + id: RecordIdKey, } #[derive(Debug, Deserialize)] struct Person { - id: CustomThing, + id: CustomRecordId, name: String, age: u8, } diff --git a/src/content/doc-sdk-rust/methods/select_live.mdx b/src/content/doc-sdk-rust/methods/select_live.mdx index f9c31dd56..993314fb0 100644 --- a/src/content/doc-sdk-rust/methods/select_live.mdx +++ b/src/content/doc-sdk-rust/methods/select_live.mdx @@ -41,12 +41,12 @@ The following example requires adding the `futures` crate with `cargo add future use futures::StreamExt; use serde::Deserialize; use surrealdb::engine::remote::ws::Ws; -use surrealdb::sql::Thing; use surrealdb::{Notification, Surreal}; +use surrealdb::RecordId; #[derive(Debug, Deserialize)] struct Person { - id: Thing, + id: RecordId, } // Handle the result of the live query notification diff --git a/src/content/doc-sdk-rust/methods/upsert.mdx b/src/content/doc-sdk-rust/methods/upsert.mdx index 57862b2d1..2a2c5943d 100644 --- a/src/content/doc-sdk-rust/methods/upsert.mdx +++ b/src/content/doc-sdk-rust/methods/upsert.mdx @@ -60,12 +60,12 @@ db.upsert(resource).content(data) ```rust use serde::{Deserialize, Serialize}; use surrealdb::engine::remote::ws::Ws; -use surrealdb::sql::Thing; +use surrealdb::RecordId; use surrealdb::Surreal; #[derive(Debug, Serialize, Deserialize)] struct Person { - id: Thing, + id: RecordId, name: Option, company: Option, settings: Option,