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;
"#;