From 63968ff522a9bdd7070fd77471ac43a652faa7ef Mon Sep 17 00:00:00 2001 From: Nikita Sivukhin Date: Wed, 30 Jul 2025 00:57:55 +0400 Subject: [PATCH] add simple example --- packages/turso-sync/examples/example_sync.rs | 65 ++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 packages/turso-sync/examples/example_sync.rs diff --git a/packages/turso-sync/examples/example_sync.rs b/packages/turso-sync/examples/example_sync.rs new file mode 100644 index 000000000..ad9fadaa9 --- /dev/null +++ b/packages/turso-sync/examples/example_sync.rs @@ -0,0 +1,65 @@ +use std::io::{self, Write}; + +use tracing_subscriber::EnvFilter; +use turso_sync::database::Builder; + +#[tokio::main] +async fn main() { + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::from_default_env()) + .init(); + let sync_url = std::env::var("TURSO_SYNC_URL").unwrap(); + let auth_token = std::env::var("TURSO_AUTH_TOKEN").ok(); + let local_path = std::env::var("TURSO_LOCAL_PATH").unwrap(); + let mut db = Builder::new_synced(&local_path, &sync_url, auth_token) + .build() + .await + .unwrap(); + + loop { + print!("> "); + io::stdout().flush().unwrap(); + + let mut input = String::new(); + let bytes_read = io::stdin().read_line(&mut input).unwrap(); + + if bytes_read == 0 { + break; + } + + let trimmed = input.trim(); + if trimmed == ".exit" || trimmed == ".quit" { + break; + } + if trimmed.starts_with(".sync-from-remote") { + db.sync_from_remote().await.unwrap(); + continue; + } + if trimmed.starts_with(".sync-to-remote") { + db.sync_to_remote().await.unwrap(); + continue; + } + let mut rows = db.query(&input, ()).await.unwrap(); + while let Some(row) = rows.next().await.unwrap() { + let mut values = vec![]; + for i in 0..row.column_count() { + let value = row.get_value(i).unwrap(); + match value { + turso::Value::Null => values.push(format!("NULL")), + turso::Value::Integer(x) => values.push(format!("{}", x)), + turso::Value::Real(x) => values.push(format!("{}", x)), + turso::Value::Text(x) => values.push(format!("'{}'", x)), + turso::Value::Blob(x) => values.push(format!( + "x'{}'", + x.iter() + .map(|x| format!("{:02x}", x)) + .collect::>() + .join(""), + )), + } + } + println!("{}", &values.join(" ")); + io::stdout().flush().unwrap(); + } + } +}