// ─── server/src/handshake.rs ─────────────────────────────────────────────── use tonic::{Request, Response, Status}; use crate::camera; use lesavka_common::lesavka::{ Empty, HandshakeSet, handshake_server::{Handshake, HandshakeServer}, }; pub struct HandshakeSvc; #[tonic::async_trait] impl Handshake for HandshakeSvc { async fn get_capabilities( &self, _req: Request, ) -> Result, Status> { let cfg = camera::update_camera_config(); let camera_enabled = match cfg.output { camera::CameraOutput::Uvc => std::env::var("LESAVKA_DISABLE_UVC").is_err(), camera::CameraOutput::Hdmi => true, }; let microphone = std::env::var("LESAVKA_DISABLE_UAC").is_err(); Ok(Response::new(HandshakeSet { camera: camera_enabled, microphone, camera_output: cfg.output.as_str().to_string(), camera_codec: cfg.codec.as_str().to_string(), camera_width: cfg.width, camera_height: cfg.height, camera_fps: cfg.fps, })) } } impl HandshakeSvc { pub fn server() -> HandshakeServer { HandshakeServer::new(Self) } }