vettich / un-rethinkdb-rs

Unofficial RethinkDB driver for Rust
MIT License
7 stars 0 forks source link

Error dblist #2

Closed wuilmerj24 closed 8 months ago

wuilmerj24 commented 8 months ago

hi, i try to get all db name rethinkdb but i get this error

this is my code

  async fn config_db(connection:Session)->Result<bool, unreql::Error>{
    // SI LA CONEXION ES OK
    if connection.connection().is_ok(){
        let dblist:Option<Vec<String>>= r.db_list().run::<unreql::Connection, Vec<String>>(connection.connection()?.clone()).try_next().await?;
        println!("dblist {:?}",dblist);
        if !dblist.contains(&env::var("ROCKET_DB_NAME").unwrap()){
            println!("no existe");
            let mut dbcreate_res = r.db_create(env::var("ROCKET_DB_NAME").unwrap()).run::<unreql::Connection, serde_json::Value>(connection.clone().connection().unwrap());
            let dbState=dbcreate_res.try_next().await;
            if dbState.is_ok(){
                let tablas_names = ["administradores"];
                for tabla in tablas_names.iter(){
                    let mut dbcreatetable=r.db(env::var("ROCKET_DB_NAME").expect("DB_NAME must be set")).table_create(tabla.to_string()).run::<unreql::Connection, serde_json::Value>(connection.clone().connection().unwrap());
                    let result = dbcreatetable.try_next().await;
                }
                return Ok(true);
            }
        }else{
            println!("existe");
            return Ok(true);
        }
    }

    Ok(false)

}

#[rocket::main]
async fn main()->Result<(), rocket::Error> {

    let cors = CorsOptions::default()
        .allowed_origins(AllowedOrigins::all())
        .allowed_methods(
            vec![Method::Get, Method::Post, Method::Patch, Method::Delete]
                .into_iter()
                .map(From::from)
                .collect(),
        )
        .allow_credentials(true);
    let mut connection = r.connect(Options::new().host(env::var("ROCKET_DB_HOST").unwrap()).port(env::var("ROCKET_DB_PORT").unwrap_or(28015.to_string()).parse::<u16>().unwrap())).await.expect("error connect rethinkdb"); 
    let conn=connection.clone();
    let result_db=config_db(connection).await.unwrap();
    rocket::build()
        .manage(conn)
        .manage(cors.to_cors())
        .register("/",catchers![unauthorized, not_found, internal_sever_error,])
        .mount("/api/v1", routes![rutas::login_admin])
        .launch()
        .await?;

    Ok(())
}

output error

  Result::unwrap()` on an `Err` value: Driver(Json(Error("invalid type: string \"beta1\", expected a sequence", line: 0, column: 0)))
vettich commented 8 months ago

Hi!

The .try_next() function gives only the first result. To get the whole data array, you need to either loop through, calling .try_next() each time, or you can call the .try_collect() method to get the whole array at once:

let dblist: Vec<String> = r.db_list().run(&connection).try_collect().await?;
wuilmerj24 commented 8 months ago

@vettich thanks for you help.