from pydantic import BaseModel from typing import Any class ApiError(BaseModel): code: str message: str class ApiResponse(BaseModel): success: bool data: Any | None = None error: ApiError | None = None def ok(data: Any) -> dict: return {"success": True, "data": data, "error": None} def fail(code: str, message: str) -> dict: return {"success": False, "data": None, "error": {"code": code, "message": message}} class DeviceInfo(BaseModel): index: int vid: str pid: str serial: str bus: int device: int class IntrinsicsInfo(BaseModel): fx: float fy: float cx: float cy: float class CameraIntrinsicsInfo(BaseModel): ir: IntrinsicsInfo rgb: IntrinsicsInfo class FrameInfo(BaseModel): frame_id: int timestamp: float rgb_shape: list[int] depth_shape: list[int] depth_min_mm: int depth_max_mm: int depth_valid_pixels: int rgb_jpeg_b64: str | None = None depth_png_b64: str | None = None