Skip to content

Commit

Permalink
feat: call R2Uploader form main func
Browse files Browse the repository at this point in the history
  • Loading branch information
0xRichardH committed Sep 22, 2023
1 parent 54e99bf commit 994200d
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 7 deletions.
Binary file added backup.db
Binary file not shown.
26 changes: 20 additions & 6 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
use anyhow::{Context, Result};
use rusqlite::Connection;
use sqlite_backup::{argument, Backup, SqliteBackup};
use std::env;
use sqlite_backup::{
argument,
uploader::{R2Uploader, Uploader},
Backup, SqliteBackup,
};
use std::{env, path::Path};

fn main() -> Result<()> {
#[tokio::main]
async fn main() -> Result<()> {
let args = env::args().collect::<Vec<String>>();
match argument::Argument::build(&args) {
Ok(arg) => run(&arg)?,
Ok(arg) => run(&arg).await?,

Err(err) => eprintln!("Application Error: {}", err),
}

Ok(())
}

fn run(arg: &argument::Argument) -> Result<()> {
async fn run(arg: &argument::Argument) -> Result<()> {
let src_conn = Connection::open(arg.source_path.clone()).context("create source connection")?;
// TODO: copy to temporary path
let dest_path = String::from("./backup.db");
SqliteBackup::new(src_conn, dest_path, |p| {
SqliteBackup::new(src_conn, dest_path.clone(), |p| {
println!(
"---Progress---- pagecount: {}, remaining: {}",
p.pagecount, p.remaining
Expand All @@ -26,5 +32,13 @@ fn run(arg: &argument::Argument) -> Result<()> {
.backup()
.context("backup source to destination")?;

// upload
let path = Path::new(dest_path.as_str());
let uploader = R2Uploader::new().await;
// TODO: get db_name and extension from the path
uploader
.upload_object(path.to_path_buf(), "test_db", "db")
.await?;

Ok(())
}
4 changes: 3 additions & 1 deletion src/uploader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ pub trait Uploader {
async fn upload_object(&self, path: PathBuf, db_name: &str, extension: &str) -> Result<()>;
}

// TODO: read the bucket_name and cloudflare_account_id from env
const BUCKET_NAME: &str = "backup-sqlite";
const CLOUDFLARE_ACCOUNT_ID: &str = "xxxxx";

pub struct R2Uploader {
client: Client,
Expand All @@ -18,7 +20,7 @@ pub struct R2Uploader {

impl R2Uploader {
pub async fn new() -> Self {
let endpoint = "https://#{cloudflare_account_id}.r2.cloudflarestorage.com".to_string();
let endpoint = format!("https://{}.r2.cloudflarestorage.com", CLOUDFLARE_ACCOUNT_ID);
let sdk_config = aws_config::load_from_env().await;
let config = aws_sdk_s3::config::Builder::from(&sdk_config)
.region(Region::new("auto"))
Expand Down

0 comments on commit 994200d

Please sign in to comment.