How to return a json instead of a string to Tauri from the users()
function below?
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
#![allow(dead_code)]
use sqlx::Row;
use std::error::Error;
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet, foo, users])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
#[derive(Debug)]
struct User {
pub email: String,
}
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}! You've been greeted from Rust!", name)
}
#[tauri::command]
fn foo(name: &str) -> String {
format!("Hello, {}! You've been greeted by Bob from Rust!", name)
}
#[tauri::command]
fn users() -> String {
let users = bar();
format!("{:?}", users.unwrap())
}
#[tokio::main]
async fn bar() -> Result<Vec<User>, Box<dyn Error>> {
dotenv::dotenv().expect("Unable to load environment variables from .env file");
let url = std::env::var("DATABASE_URL").expect("Unable to read DATABASE_URL env var");
let pool = sqlx::postgres::PgPool::connect(&url).await?;
// println!("{:?}", users);
let q = "SELECT email FROM users";
let query = sqlx::query(q);
let rows = query.fetch_all(&pool).await?;
let users = rows
.iter()
.map(|row| User {
email: row.get("email"),
})
.collect();
// format!("{:?}", users)
Ok(users)
}