use crate::extern_functions::*;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::helpers::*;
use crate::{error::Error};
pub struct ScreenReader;
impl ScreenReader {
#[cfg(any(feature = "ios", feature = "android"))]
pub async fn is_enabled() -> Result<ScreenReaderState, Error> {
run_unit_value(screen_reader_is_enabled).await
}
pub async fn speak(options: impl Into<SpeakOptions>) -> Result<(), Error> {
run_value_unit(options, screen_reader_speak).await
}
#[cfg(any(feature = "ios", feature = "android"))]
pub async fn add_state_change_listener<F: Fn(ScreenReaderState) + 'static>(
func: F,
) -> Result<crate::plugin_listener_handle::PluginListenerHandle, Error> {
listen_async(func, "stateChange", network_add_listener).await
}
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct SpeakOptions {
pub value: String,
pub language: Option<String>,
}
#[skip_serializing_none]
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct ScreenReaderState {
pub value: bool,
}
impl From<&str> for SpeakOptions {
fn from(value: &str) -> Self {
SpeakOptions {
value: value.to_string(),
language: None,
}
}
}
impl From<String> for SpeakOptions {
fn from(value: String) -> Self {
SpeakOptions {
value,
language: None,
}
}
}