feat: got sqlx working with axum and leptos
This commit is contained in:
@@ -1,8 +1,67 @@
|
||||
use leptos::prelude::*;
|
||||
use serde::{Serialize, Deserialize};
|
||||
#[cfg(feature = "ssr")]
|
||||
use {
|
||||
sqlx::SqlitePool
|
||||
};
|
||||
|
||||
#[derive(Clone, Serialize, Deserialize)]
|
||||
pub struct PubUser {
|
||||
user_id: i64,
|
||||
user_name: String
|
||||
}
|
||||
|
||||
#[server]
|
||||
async fn list_users() -> Result<Vec<PubUser>, ServerFnError> {
|
||||
use leptos::server_fn::error::NoCustomError;
|
||||
|
||||
let pool = expect_context::<SqlitePool>();
|
||||
|
||||
let users = sqlx::query_as!(
|
||||
PubUser,
|
||||
"SELECT user_id, user_name FROM users"
|
||||
)
|
||||
.fetch_all(&pool)
|
||||
.await?;
|
||||
|
||||
Ok(users)
|
||||
}
|
||||
|
||||
#[component]
|
||||
pub fn UserView() -> impl IntoView {
|
||||
let user_list = Resource::new(|| (), |_| async move { list_users().await });
|
||||
|
||||
view! {
|
||||
<p>"User view"</p>
|
||||
<h1>"User list"</h1>
|
||||
<Suspense
|
||||
fallback=move || view! { <p>"Loading..."</p> }
|
||||
>
|
||||
<ErrorBoundary
|
||||
fallback=|errors| view! {
|
||||
<p>"Errors loading users!"</p>
|
||||
<ul>
|
||||
{move || errors.get()
|
||||
.into_iter()
|
||||
.map(|(_, e)| view! { <li>{e.to_string()}</li> })
|
||||
.collect::<Vec<_>>()}
|
||||
</ul>
|
||||
}
|
||||
>
|
||||
{move || Suspend::new(async move {
|
||||
let users_res = user_list.await;
|
||||
|
||||
users_res.map(|users| view! {
|
||||
<ul>
|
||||
{users
|
||||
.into_iter()
|
||||
.map(|user| view! {
|
||||
<li>{user.user_id}": "{user.user_name}</li>
|
||||
})
|
||||
.collect::<Vec<_>>()}
|
||||
</ul>
|
||||
})
|
||||
})}
|
||||
</ErrorBoundary>
|
||||
</Suspense>
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user