SurrealDB experiments



examples/surrealdb/create-select/Cargo.toml
[package]
name = "create-select"
version = "0.1.0"
edition = "2021"

[dependencies]
surrealdb = "2.0"
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.35", features = ["macros", "rt-multi-thread"] }

examples/surrealdb/create-select/src/main.rs
use serde::{Deserialize, Serialize};
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb::opt::Resource;
use surrealdb::Surreal;

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

// #[derive(Debug, Serialize, Deserialize)]
// struct User {
//     name: String,
// }

#[tokio::main]
async fn main() -> surrealdb::Result<()> {
    println!("Connect to the server");
    let db = Surreal::new::<Ws>("127.0.0.1:8000").await?;

    println!("Signin as a namespace, database, or root user");
    db.signin(Root {
        username: "root",
        password: "root",
    })
    .await?;

    println!("Select a specific namespace / database");
    db.use_ns("demo").use_db("demo-2").await?;

    let args = std::env::args().collect::<Vec<String>>();
    match args.len() {
        1 => {
            println!("list");
            let groups: Vec<Group> = db.select("groups").await?;
            for group in groups {
                println!("{:?}", group);
            }

            //  let mut response = db.query("SELECT * FROM groups").await?;
            // let entries = response.take(0);
            //         println!("{}", entries);
            //     }
        }
        2 => {
            let group_name = args[1].clone();
            println!("Add group '{group_name}'");
            let group = Group { name: group_name };

            let result = db.create(Resource::from("groups")).content(group).await?;
            println!("{}", result);
        }
        3 => {
            let (user, group) = (&args[1], &args[2]);
            println!("Add user '{user}' to group '{group}'");
        }
        _ => println!("invalid"),
    };

    Ok(())
}