use crate::camera::Camera;
use crate::error::Error;
use crate::monitor::DeviceMonitor;
use crate::types::{Capabilities, Device, DeviceId, StreamConfig};
#[cfg(feature = "controls")]
use crate::types::{ControlCapabilities, Controls};
pub trait Backend {
type SessionHandle;
fn devices() -> Result<Vec<Device>, Error>;
fn probe(id: &DeviceId) -> Result<Capabilities, Error>;
fn open(id: &DeviceId, config: StreamConfig) -> Result<Camera, Error>;
fn monitor() -> Result<DeviceMonitor, Error>;
}
#[cfg(feature = "controls")]
pub trait BackendControls: Backend {
fn control_capabilities(id: &DeviceId) -> Result<ControlCapabilities, Error>;
fn read_controls(id: &DeviceId) -> Result<Controls, Error>;
fn apply_controls(id: &DeviceId, controls: &Controls) -> Result<(), Error>;
}