App settings as JSON format stored in file and available via read-by-key and write-by-key.
Aims a tiny settings manager with reasonably few dependencies.
use app_json_settings::JsonSettigs;
#[tauri::command]
fn settings_read_by_key(key: &str) -> Result<KeyValue, String> {
JsonSettigs::exe_dir().read_by_key(key).map_err(|err| err.to_string())
}
#[tauri::command]
fn settings_write_by_key(key: &str, value: Value) -> Result<(), String> {
JsonSettigs::exe_dir().write_by_key(key, &value).map_err(|err| err.to_string())
}
Instead of JsonSettigs::exe_dir()
above, where to store the settings file has options.
fn | where to store |
---|---|
exe_dir() |
the same to where the executable is |
config_dir() |
points to app dir in user config dir. the app dir name is automatically defined due to the executable name |
new(filepath) |
custom path and file name |
import { invoke } from '@tauri-apps/api/core'
interface ReadByKeyResponse {
key: string
value: unknown
file_exists: boolean
key_exists: boolean
}
const read = (key: string): Promise<unknown> => {
return invoke('settings_read_by_key', { key: key }).then((res) => {
const _res = res as ReadByKeyResponse
if (!_res.file_exists || !_res.key_exists) return undefined
return _res.value
})
}
const write = (key: string, value: any) => {
invoke('settings_write_by_key', { key: key, value: value })
}
{
"keyBoolean": true,
"keyNumber": 1000,
"keyString": "Hello world."
}
Depends on: serde / serde_json .