// Jackson Coxson #pragma once #include #include #include #include #include #include namespace IdeviceFFI { using LockdownLocationSimulationPtr = std::unique_ptr>; class LockdownLocationSimulation { public: // Factory: connect via Provider static Result connect(Provider& provider); // Factory: wrap an existing Idevice socket (consumes it on success) static Result from_socket(Idevice&& socket); // Ops Result set(const std::string& latitude, const std::string& longitude); Result clear(); // RAII / moves ~LockdownLocationSimulation() noexcept = default; LockdownLocationSimulation(LockdownLocationSimulation&&) noexcept = default; LockdownLocationSimulation& operator=(LockdownLocationSimulation&&) noexcept = default; LockdownLocationSimulation(const LockdownLocationSimulation&) = delete; LockdownLocationSimulation& operator=(const LockdownLocationSimulation&) = delete; LocationSimulationServiceHandle* raw() const noexcept { return handle_.get(); } static LockdownLocationSimulation adopt(LocationSimulationServiceHandle* h) noexcept { return LockdownLocationSimulation(h); } private: explicit LockdownLocationSimulation(LocationSimulationServiceHandle* h) noexcept : handle_(h) { } LockdownLocationSimulationPtr handle_{}; }; } // namespace IdeviceFFI