use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::{extern_functions::*, helpers::*};
use crate::{error::Error};
pub struct Preferences;
impl Preferences {
pub async fn configure(options: impl Into<ConfigureOptions>) -> Result<(), Error> {
run_value_unit(options, preferences_configure).await
}
pub async fn set(options: impl Into<SetOptions>) -> Result<(), Error> {
run_value_unit(options, preferences_set).await
}
pub async fn remove(options: impl Into<RemoveOptions>) -> Result<(), Error> {
run_value_unit(options, preferences_remove).await
}
pub async fn get(options: impl Into<GetOptions>) -> Result<GetResult, Error> {
run_value_value(options, preferences_get).await
}
pub async fn clear() -> Result<(), Error> {
run_unit_unit(preferences_clear).await
}
pub async fn keys() -> Result<KeysResult, Error> {
run_unit_value(preferences_keys).await
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct ConfigureOptions {
pub group: String,
}
impl From<&str> for ConfigureOptions {
fn from(val: &str) -> Self {
ConfigureOptions {
group: val.to_string(),
}
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct GetResult {
pub value: Option<String>,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct GetOptions {
pub key: String,
}
impl From<&str> for GetOptions {
fn from(val: &str) -> Self {
GetOptions {
key: val.to_string(),
}
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct SetOptions {
pub key: String,
pub value: String,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct RemoveOptions {
pub key: String,
}
impl From<&str> for RemoveOptions {
fn from(val: &str) -> Self {
RemoveOptions {
key: val.to_string(),
}
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct KeysResult {
pub keys: Vec<String>,
}