blob: 941ea597a18124ff92705eb0bbabca1a374f34ac [file] [log] [blame]
#ifndef PRODUCTION_SUSHID_SAFEPOWER_AGENT_SCHEDULER_INTERFACE_H_
#define PRODUCTION_SUSHID_SAFEPOWER_AGENT_SCHEDULER_INTERFACE_H_
#include <string_view>
#include "absl/functional/any_invocable.h"
#include "absl/status/status.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
namespace safepower_agent {
class SchedulerInterface {
public:
virtual ~SchedulerInterface() = default;
// Schedule a task that will call a function every interval
// returns an error if name is already in use
virtual absl::Status PeriodicCall(absl::AnyInvocable<void()> fn,
absl::Duration interval,
std::string_view name) = 0;
// Schedule task that will call a function once after waitDuration
// returns an error if name is already in use
virtual absl::Status DelayCall(absl::AnyInvocable<void() &&> fn,
absl::Duration wait_duration,
std::string_view name) = 0;
// Cancel a Scheduled task permanently
// returns an error if name is not in use
virtual absl::Status CancelCall(std::string_view name) = 0;
// Cancel all Scheduled task permanently
virtual absl::Status CancelAll() = 0;
// Explicitly disables the Scheduler
virtual absl::Status Shutdown() = 0;
};
} // namespace safepower_agent
#endif // PRODUCTION_SUSHID_SAFEPOWER_AGENT_SCHEDULER_INTERFACE_H_