Closed ohmyarch closed 4 years ago
Could we also change the interface a bit to the direction of how r2d2 works, could it be possible now with std::future
, async/await and Pin
?
So we could be able to use it in a more synchronous-looking manner:
impl AsyncConnector for MyTestPostgresConnector {
fn run(&self, query: String) -> FutureObj<'static, crate::Result<serde_json::Value>> {
let fut = async move {
let mut client = self.pool.get().await?;
let stmt = client.prepare(query.as_str()).await?;
let rows = client.query(&stmt, &[]).collect().await?;
Ok(rows.into_json()?)
};
FutureObj::new(Box::new(fut))
}
}
Any updates for this? In my app server grabbing the connection each request adds a lot of overhead. I'd like to use this with Rocket, but currently they're incompatible because async Rocket is already on std::future
.
Not really much we can do here until tokio-postgres at least supports these things, since we're heavily dependent on it.
What is tokio-postgres still missing? I've been using its std-futures branch without any real issues for a couple weeks now.
Maybe it's not missing anything in git, I haven't looked in a while. tokio-postgres doesn't really do releases unfortunately so it's hard to know when it's reached usable points.
Ah okay. Well I can give a bit of an endorsement here I think. I've been using the Rocket
futures branch and the tokio-postgres
futures branch in my project for the past month or so and haven't run into any issues yet.
I was talking to the Rocket developers just now and they're interested in using bb8 to implement an async connection pool for postgres in Rocket, but were just waiting on this crate to also update to std-futures. What do you think? :D
Unfortunately I have no idea what the effort required is to update from futures 0.1 to 0.3 since I'm still a Rust noob. Is it very hard?
Alright, I'll take a look at where things stand but that's unlikely to happen before Sunday at the earliest.
I don't think futures 0.1->0.3 is going to be that painful.
What! That's amazing news! Thanks so much!
Hi @khuey I was wondering if you ever got a chance to check out tokio-postgres's futures branch and if it could work with bb8.
I've got an initial attempt in #37 that's most of the way there.
tokio-postgres v0.5.0-alpha.1 which uses std::futures::Future and async/await syntax is out.
async/await syntax stabilized in 1.39.
This is done.
https://github.com/rust-lang/rust/pull/63209#issuecomment-523113079 https://tokio.rs/blog/2019-08-alphas/