Можно ли использовать плагин tauri-plugin-sql в основном коде на языке Rust?

Можно ли использовать плагин tauri-plugin-sql и его методы не только в JavaScript, но и в коде Rust, включая подключение к базе данных с помощью struct DbInstances(Mutex<DbConnection>);? Или нужно создавать дублирующую реализацию внутри main.rs, чтобы использовать его функциональность? Если у вас есть опыт подключения SQLite к TAURI, поделитесь своими наработками, пожалуйста.
  • 26 сентября 2023 г. 16:47
Ответы на вопрос 2
Да, плагин tauri-plugin-sql может быть использован в основном коде на языке Rust. Он предоставляет API для выполнения SQL-запросов в SQLite и может быть использован как в JavaScript, так и в коде Rust.

Для использования плагина в коде Rust вам нужно создать свойство с типом `tauri::WebviewManager`, которое будет использовано для взаимодействия с JavaScript, и затем вызывать методы плагина через это свойство. Например, вы можете создать структуру `DbInstances` с полем `Mutex<DbConnection>`, которое будет использоваться для подключения к базе данных:

```rust
use std::sync::Mutex;
use tauri::WebviewManager;

struct DbInstances {
    connection: Mutex<DbConnection>,
}

impl DbInstances {
    fn new() -> Self {
        // инициализация подключения к базе данных
    }

    fn execute_sql_query(&self, query: &str) -> Result<(), String> {
        // выполнение SQL-запроса через tauri-plugin-sql
        let result = tauri::execute_promise(
            &self.connection,
            "sql",
            "executeSql",
            &[tauri::plugin::SqlArg::String(query.to_owned())],
        );
        
        // обработка результата
        if let Ok(response) = result {
            if let Some(error) = response.error {
                return Err(error.to_string());
            }
        }
        
        Ok(())
    }
}
```

Затем вы можете использовать `DbInstances` в основной функции `main.rs` и вызывать его методы для работы с базой данных.

Вот пример простейшей реализации подключения к SQLite с использованием плагина `tauri-plugin-sql`:

```rust
fn main() {
    tauri::Builder::default()
        .setup(|app| {
            let db = DbInstances::new();
            app.data(db)
        })
        .invoke_handler(tauri::generate_handler![/* ... */])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
```

К сожалению, у меня нет личного опыта подключения SQLite к Tauri, но описанный выше подход должен работать. Убедитесь, что у вас установлен и настроен плагин `tauri-plugin-sql` в вашем проекте, и проверьте документацию Tauri и плагина для получения дополнительной информации по использованию и настройке.
Будьте осторожны с публичным форком и использованием данной структуры из ссылки, которую вы предоставили: https://github.com/tauri-apps/tauri-plugin-sql/blo... Если вам нужно заменить инжекты на lazy_static при работе с Tauri, прежде всего ознакомьтесь с особенностями и документацией по использованию инжектов в Tauri.
Похожие вопросы