// Jackson Coxson #pragma once #include #include #include #include #include #include namespace IdeviceFFI { using ConditionInducerPtr = std::unique_ptr>; /// A single condition profile within a group struct ConditionProfile { std::string identifier; std::string description; }; /// A condition inducer group containing one or more profiles struct ConditionGroup { std::string identifier; std::vector profiles; }; class ConditionInducer { public: static Result create(RemoteServer& server); Result, FfiError> available_conditions(); Result enable(const std::string& condition_id, const std::string& profile_id); Result disable(); ~ConditionInducer() noexcept = default; ConditionInducer(ConditionInducer&&) noexcept = default; ConditionInducer& operator=(ConditionInducer&&) noexcept = default; ConditionInducer(const ConditionInducer&) = delete; ConditionInducer& operator=(const ConditionInducer&) = delete; ConditionInducerHandle* raw() const noexcept { return handle_.get(); } static ConditionInducer adopt(ConditionInducerHandle* h) noexcept { return ConditionInducer(h); } private: explicit ConditionInducer(ConditionInducerHandle* h) noexcept : handle_(h) {} ConditionInducerPtr handle_{}; }; } // namespace IdeviceFFI