// Jackson Coxson #pragma once #include #include #include #include #include namespace IdeviceFFI { using ScreenshotrPtr = std::unique_ptr>; class Screenshotr { public: // Factory: connect via Provider static Result connect(Provider& provider); // Factory: connect via RSD tunnel static Result connect_rsd(AdapterHandle* adapter, RsdHandshakeHandle* handshake); // Ops Result, FfiError> take_screenshot(); // RAII / moves ~Screenshotr() noexcept = default; Screenshotr(Screenshotr&&) noexcept = default; Screenshotr& operator=(Screenshotr&&) noexcept = default; Screenshotr(const Screenshotr&) = delete; Screenshotr& operator=(const Screenshotr&) = delete; ScreenshotrClientHandle* raw() const noexcept { return handle_.get(); } static Screenshotr adopt(ScreenshotrClientHandle* h) noexcept { return Screenshotr(h); } private: explicit Screenshotr(ScreenshotrClientHandle* h) noexcept : handle_(h) {} ScreenshotrPtr handle_{}; }; } // namespace IdeviceFFI