rust_widgets 1.0.0

Pure Rust cross-platform native GUI library with hardware-adaptive rendering, 60+ widgets, touch/gesture support, i18n, and SVG-pipeline-accurate output
#[cfg(not(feature = "mini"))]
pub fn write_media_props(
    widget: &mut dyn Widget,
    property_name: &str,
    value: CapabilityValue,
) -> Result<(), CapabilityAccessError> {
    match widget.kind() {
        WidgetKind::AnimatedImage => {
        if let Some(w) = widget_as_mut::<AnimatedImage>(widget) {
        match property_name {
        "playing" => {
        if expect_bool(value)? {
        w.play();
        } else {
        w.pause();
        }
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        WidgetKind::HeroAnimation => {
        if let Some(w) = widget_as_mut::<HeroAnimation>(widget) {
        match property_name {
        "animation_progress" => {
        w.set_progress(expect_f32(value)?);
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        WidgetKind::LottieWidget => {
        if let Some(w) = widget_as_mut::<LottieWidget>(widget) {
        match property_name {
        "playing" => {
        if expect_bool(value)? {
        w.play();
        } else {
        w.pause();
        }
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        WidgetKind::RiveWidget => {
        if let Some(w) = widget_as_mut::<RiveWidget>(widget) {
        match property_name {
        "is_playing" => {
        if expect_bool(value)? {
        w.play();
        } else {
        w.pause();
        }
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        WidgetKind::VideoPlayer => {
        if let Some(w) = widget_as_mut::<VideoPlayer>(widget) {
        match property_name {
        "is_playing" => {
        if expect_bool(value)? {
        w.play();
        } else {
        w.pause();
        }
        Ok(())
        }
        "volume" => {
        w.set_volume(expect_f32(value)?);
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        WidgetKind::AudioVisualizer => {
        if let Some(w) = widget_as_mut::<AudioVisualizer>(widget) {
        match property_name {
        "bar_count" => {
        w.set_bar_count(expect_usize(value)?);
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        WidgetKind::CameraPreview => {
        if let Some(w) = widget_as_mut::<CameraPreview>(widget) {
        match property_name {
        "is_active" => {
        if expect_bool(value)? {
        w.start_preview();
        } else {
        w.stop_preview();
        }
        Ok(())
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
        }
        } else {
        Err(CapabilityAccessError::UnsupportedOnWidget)
        }
        }
        _ => Err(CapabilityAccessError::UnsupportedOnWidget),
    }
}