tenho seguinte código tauri v2 rust

use tauri::{command, AppHandle};
use tauri::Manager;
use tauri::Wry;
use tauri_plugin_store::{with_store, StoreCollection};
use serde_json::json;
use std::path::PathBuf;

// Bring in the encrypt_password module
mod encrypt_password;
use encrypt_password::{Credentials, hash_password, verify_password};

#[command]
async fn save_credentials(app: AppHandle<Wry>, username: String, password: String) -> Result<(), String> {
    let stores = app.state::<StoreCollection<Wry>>();
    let path = PathBuf::from("store.bin");

    // Hash the password
    let hashed_password = hash_password(&password).map_err(|e| e.to_string())?;

    let credentials = Credentials {
        username: username.clone(),
        password_hash: hashed_password.clone(),
    };

    // Serialize the credentials to JSON
    let credentials_json = json!(credentials);

    // Save to the store
    with_store(app.clone(), stores, path, |store| {
        store.insert("credentials".to_string(), credentials_json)?;
        store.save()?;
        Ok(())
    }).map_err(|e| e.to_string())?;

    Ok(())
}

#[command]
async fn load_credentials(app: AppHandle<Wry>) -> Result<Credentials, String> {
    let stores = app.state::<StoreCollection>().await.unwrap();
    let path = PathBuf::from("store.bin");

    let credentials = with_store(app.clone(), stores, path, |store| {
        let value = store.get("credentials").ok_or("Credentials not found in store")?;
        // Deserialize the value back into Credentials
        let credentials: Credentials = serde_json::from_value(value.clone()).map_err(|e| e.to_string())?;
        Ok(credentials)
    }).map_err(|e| e.to_string())?;

    Ok(credentials)
}

#[command]
async fn verify_user_password(app: AppHandle<Wry>, username: String, password: String) -> Result<bool, String> {
    let credentials = load_credentials(app).await?;

    if credentials.username != username {
        return Ok(false);
    }

    let is_valid = verify_password(&credentials.password_hash, &password).map_err(|e| e.to_string())?;

    Ok(is_valid)
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_shell::init())
        .plugin(tauri_plugin_store::Builder::default().build())
        .setup(|app| {
            // Perform any setup actions here
            let handle = app.handle();
            let stores = handle.state::<StoreCollection>();
            let path = PathBuf::from("store.bin");

            with_store(handle.clone(), stores, path, |store| {
                // Example: Initialize default values if they don't exist
                if !store.contains_key("credentials") {
                    // Set default credentials or leave empty
                    store.insert("credentials".to_string(), json!(null))?;
                    store.save()?;
                }
                Ok(())
            }).map_err(|e| e.to_string())?;

            Ok(())
        })
        .invoke_handler(tauri::generate_handler![
            save_credentials,
            load_credentials,
            verify_user_password
        ])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

Como corrijo erros recebidos

[{
	"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs",
	"owner": "rustc",
	"code": {
		"value": "Click for full compiler diagnostic",
		"target": {
			"$mid": 1,
			"external": "rust-analyzer-diagnostics-view:/diagnostic%20message%20%5B0%5D?0#file%3A%2F%2F%2Fc%253A%2FUsers%2Fjonatas%2FDesktop%2FiNovaRO%2FRagnaTales%2Fsrc-tauri%2Fsrc%2Flib.rs",
			"path": "/diagnostic message [0]",
			"scheme": "rust-analyzer-diagnostics-view",
			"query": "0",
			"fragment": "file:///c%3A/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	},
	"severity": 8,
	"message": "missing generics for struct `StoreCollection`\nexpected 1 generic argument",
	"source": "rustc",
	"startLineNumber": 14,
	"startColumn": 30,
	"endLineNumber": 14,
	"endColumn": 45,
	"relatedInformation": [
		{
			"startLineNumber": 39,
			"startColumn": 12,
			"endLineNumber": 39,
			"endColumn": 27,
			"message": "struct defined here, with 1 generic parameter: `R`",
			"resource": "/c:/Users/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-plugin-store-2.0.0-rc.3/src/lib.rs"
		},
		{
			"startLineNumber": 14,
			"startColumn": 45,
			"endLineNumber": 14,
			"endColumn": 45,
			"message": "add missing generic argument: `<_>`",
			"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	]
},{
	"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs",
	"owner": "rustc",
	"code": {
		"value": "Click for full compiler diagnostic",
		"target": {
			"$mid": 1,
			"path": "/diagnostic message [2]",
			"scheme": "rust-analyzer-diagnostics-view",
			"query": "2",
			"fragment": "file:///c%3A/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	},
	"severity": 8,
	"message": "missing generics for struct `StoreCollection`\nexpected 1 generic argument",
	"source": "rustc",
	"startLineNumber": 40,
	"startColumn": 30,
	"endLineNumber": 40,
	"endColumn": 45,
	"relatedInformation": [
		{
			"startLineNumber": 39,
			"startColumn": 12,
			"endLineNumber": 39,
			"endColumn": 27,
			"message": "struct defined here, with 1 generic parameter: `R`",
			"resource": "/c:/Users/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-plugin-store-2.0.0-rc.3/src/lib.rs"
		},
		{
			"startLineNumber": 40,
			"startColumn": 45,
			"endLineNumber": 40,
			"endColumn": 45,
			"message": "add missing generic argument: `<_>`",
			"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	]
},{
	"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs",
	"owner": "rustc",
	"code": {
		"value": "Click for full compiler diagnostic",
		"target": {
			"$mid": 1,
			"path": "/diagnostic message [4]",
			"scheme": "rust-analyzer-diagnostics-view",
			"query": "4",
			"fragment": "file:///c%3A/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	},
	"severity": 8,
	"message": "`?` couldn't convert the error to `tauri_plugin_store::Error`\nthe question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait\nthe following other types implement trait `From<T>`:\n  <tauri_plugin_store::Error as From<serde_json::Error>>\n  <tauri_plugin_store::Error as From<std::io::Error>>\n  <tauri_plugin_store::Error as From<tauri::Error>>\nrequired for `Result<_, tauri_plugin_store::Error>` to implement `FromResidual<Result<Infallible, &str>>`",
	"source": "rustc",
	"startLineNumber": 44,
	"startColumn": 85,
	"endLineNumber": 44,
	"endColumn": 86
},{
	"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs",
	"owner": "rustc",
	"code": {
		"value": "Click for full compiler diagnostic",
		"target": {
			"$mid": 1,
			"path": "/diagnostic message [5]",
			"scheme": "rust-analyzer-diagnostics-view",
			"query": "5",
			"fragment": "file:///c%3A/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	},
	"severity": 8,
	"message": "`?` couldn't convert the error to `tauri_plugin_store::Error`\nthe question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait\nthe following other types implement trait `From<T>`:\n  <tauri_plugin_store::Error as From<serde_json::Error>>\n  <tauri_plugin_store::Error as From<std::io::Error>>\n  <tauri_plugin_store::Error as From<tauri::Error>>\nrequired for `Result<_, tauri_plugin_store::Error>` to implement `FromResidual<Result<Infallible, std::string::String>>`",
	"source": "rustc",
	"startLineNumber": 46,
	"startColumn": 104,
	"endLineNumber": 46,
	"endColumn": 105
},{
	"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs",
	"owner": "rustc",
	"code": {
		"value": "Click for full compiler diagnostic",
		"target": {
			"$mid": 1,
			"path": "/diagnostic message [6]",
			"scheme": "rust-analyzer-diagnostics-view",
			"query": "6",
			"fragment": "file:///c%3A/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	},
	"severity": 8,
	"message": "missing generics for struct `StoreCollection`\nexpected 1 generic argument",
	"source": "rustc",
	"startLineNumber": 74,
	"startColumn": 41,
	"endLineNumber": 74,
	"endColumn": 56,
	"relatedInformation": [
		{
			"startLineNumber": 39,
			"startColumn": 12,
			"endLineNumber": 39,
			"endColumn": 27,
			"message": "struct defined here, with 1 generic parameter: `R`",
			"resource": "/c:/Users/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tauri-plugin-store-2.0.0-rc.3/src/lib.rs"
		},
		{
			"startLineNumber": 74,
			"startColumn": 56,
			"endLineNumber": 74,
			"endColumn": 56,
			"message": "add missing generic argument: `<_>`",
			"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	]
},{
	"resource": "/c:/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs",
	"owner": "rustc",
	"code": {
		"value": "Click for full compiler diagnostic",
		"target": {
			"$mid": 1,
			"path": "/diagnostic message [8]",
			"scheme": "rust-analyzer-diagnostics-view",
			"query": "8",
			"fragment": "file:///c%3A/Users/Desktop/iNovaRO/RagnaTales/src-tauri/src/lib.rs"
		}
	},
	"severity": 8,
	"message": "no method named `contains_key` found for mutable reference `&mut Store<tauri_runtime_wry::Wry<EventLoopMessage>>` in the current scope\nmethod not found in `&mut Store<Wry<EventLoopMessage>>`",
	"source": "rustc",
	"startLineNumber": 79,
	"startColumn": 27,
	"endLineNumber": 79,
	"endColumn": 39
}]