delta-sharing 0.2.0

Delta Sharing client library
use delta_sharing::protocol::ProviderConfig;
use delta_sharing::Client;

#[tokio::main]
async fn main() {
    use std::fs;

    env_logger::init();

    println!("An example using an async client");

    let conf_str = &fs::read_to_string("./config.json").unwrap();
    let config: ProviderConfig = serde_json::from_str(conf_str).expect("Invalid configuration");
    let mut app = Client::new(config, None, None).await.unwrap();
    let shares = app.list_shares().await.unwrap();
    if shares.len() == 0 {
        println!("At least 1 Delta Share is required");
    } else {
        let share_name = &shares[0].name;
        println!(
            "Found {} shares, exploring share [{}]",
            shares.len(),
            share_name
        );
        let schemas = app.list_schemas(&shares[0]).await.unwrap();
        println!("Found {} schemas in share [{}]", schemas.len(), &share_name);

        if schemas.len() == 0 {
            let schema_tables = app.list_tables(&schemas[0]).await.unwrap();
            println!(
                "Found {} tables in schema [{}]",
                schema_tables.len(),
                &schemas[0].name
            );
        }

        let tables = app.list_all_tables(&shares[0]).await.unwrap();
        if shares.len() == 0 {
            println!(
                "Need at least one table in share {} (or use a different share)",
                shares[0].name
            );
        } else {
            let res = app
                .get_dataframe(&tables[0], None)
                .await
                .unwrap()
                .collect()
                .unwrap();
            println!("Dataframe:\n {}", res);
        }
    }
}