xcap 0.9.4

XCap is a cross-platform screen capture library written in Rust. It supports Linux (X11, Wayland), MacOS, and Windows. XCap supports screenshot and video recording (WIP).
use std::sync::mpsc::Receiver;

use crate::{XCapResult, video_recorder::Frame};

use super::{
    impl_monitor::ImplMonitor, utils::wayland_detect, wayland_video_recorder::WaylandVideoRecorder,
    xorg_video_recorder::XorgVideoRecorder,
};

#[derive(Debug, Clone)]
pub enum ImplVideoRecorder {
    Xorg(XorgVideoRecorder),
    Wayland(WaylandVideoRecorder),
}

impl ImplVideoRecorder {
    pub fn new(monitor: ImplMonitor) -> XCapResult<(Self, Receiver<Frame>)> {
        if wayland_detect() {
            let (recorder, receiver) = WaylandVideoRecorder::new(monitor)?;
            Ok((ImplVideoRecorder::Wayland(recorder), receiver))
        } else {
            let (recorder, receiver) = XorgVideoRecorder::new(monitor)?;
            Ok((ImplVideoRecorder::Xorg(recorder), receiver))
        }
    }

    pub fn start(&self) -> XCapResult<()> {
        match self {
            ImplVideoRecorder::Xorg(recorder) => recorder.start(),
            ImplVideoRecorder::Wayland(recorder) => recorder.start(),
        }
    }

    pub fn stop(&self) -> XCapResult<()> {
        match self {
            ImplVideoRecorder::Xorg(recorder) => recorder.stop(),
            ImplVideoRecorder::Wayland(recorder) => recorder.stop(),
        }
    }
}