Saltar al contenido principal

Turso

Instalación

cargo add libsql
cargo add dotenvy
.env
TURSO_DATABASE_URL=
TURSO_AUTH_TOKEN=

Ejemplos

use std::{env, error::Error};

use libsql::{Builder, Connection, Database};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Load variable environments
dotenvy::dotenv()?;

// Connect to TursoDB Cloud
let url = env::var("TURSO_DATABASE_URL")?;
let token = env::var("TURSO_AUTH_TOKEN")?;

let db: Database = Builder::new_remote(url, token).build().await?;
let conn: Connection = db.connect()?;

// Queries
let mut rows = conn.query("SELECT * FROM user;", ()).await?;
let mut users = Vec::new();

// Process result
while let Some(row) = rows.next().await? {
users.push((row.get::<String>(0)?, row.get::<String>(1)?))
}
println!("{:#?}", users);

Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Load variable environments
dotenvy::dotenv()?;

// Connect to TursoDB Cloud
let url = env::var("TURSO_DATABASE_URL")?;
let token = env::var("TURSO_AUTH_TOKEN")?;

let db: Database = Builder::new_remote(url, token).build().await?;
let conn: Connection = db.connect()?;

// example id: 8
let group_id = 8;
let mut rows = conn.query(QUERY, [group_id]).await?;
let mut items: Vec<SimpleItem> = Vec::new();

// process data
while let Some(row) = rows.next().await? {
let item_kind: String = row.get(0)?;
let group_title: String = row.get(1)?;
let item_description: String = row.get(2)?;
let attributes_json: String = row.get(3)?;

let attributes: Vec<Attribute> = serde_json::from_str(&attributes_json)?;

let item = SimpleItem {
item_kind,
group_title,
item_description,
attributes,
};

items.push(item);
}

// Save to JSON
let output_path = Path::new("items")
.join(group_id.to_string())
.with_extension("json");

fs::write(&output_path, serde_json::to_string_pretty(&items)?)?;

Ok(())
}

const QUERY: &str = r#"
SELECT
i.kind AS item_kind,
g.title AS group_title,
d.description AS item_description,

(
SELECT json_group_array(
json_object(
'code', a.code,
'value', a.value
)
)
FROM Attribute a
WHERE a.detailId = d.id
) AS attributes

FROM Item i
JOIN Group g ON g.id = i.groupId
JOIN Detail d ON d.itemId = i.id

WHERE g.id = ?1

ORDER BY i.id;
"#;