use dbcrossbarlib::{drivers::postgres::citus::citus_shards, Result};
use diesel::{pg::PgConnection, prelude::*};
use failure::{bail, format_err, ResultExt};
use std::env;
use url::Url;
fn main() -> Result<()> {
let database_url: Url = env::var("DATABASE_URL")
.map_err(|_| format_err!("no DATABASE_URL found in environment"))?
.parse()?;
let args = env::args().skip(1).collect::<Vec<_>>();
if args.len() != 1 || args[0].starts_with('-') {
bail!("Usage: citus_shards <table_name>");
}
let table_name = &args[0];
let conn = PgConnection::establish(database_url.as_str())
.context("could not connect to database")?;
let shards = citus_shards(table_name, &conn)?;
for shard in shards {
let name = shard.name()?;
let url = shard.url(&database_url)?;
println!("{} {}", name, url);
}
Ok(())
}