summaryrefslogtreecommitdiff
path: root/src/state/ready_state.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/ready_state.hpp')
-rw-r--r--src/state/ready_state.hpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/state/ready_state.hpp b/src/state/ready_state.hpp
new file mode 100644
index 0000000..5edfa06
--- /dev/null
+++ b/src/state/ready_state.hpp
@@ -0,0 +1,58 @@
+#pragma once
+
+#include "activating_state.hpp"
+#include "basic_state.hpp"
+
+struct ReadyState : public BasicStateT<ReadyState>
+{
+ static std::string_view stateName()
+ {
+ return "ReadyState";
+ }
+
+ struct Error
+ {
+ std::errc code;
+ std::string message;
+ };
+
+ ReadyState(interfaces::MountPointStateMachine& machine) :
+ BasicStateT(machine){};
+
+ ReadyState(interfaces::MountPointStateMachine& machine, const std::errc& ec,
+ const std::string& message) :
+ BasicStateT(machine),
+ error{{ec, message}}
+ {
+ LogMsg(Logger::Error, machine.getName(),
+ " Errno = ", static_cast<int>(ec), " : ", message);
+ }
+
+ std::unique_ptr<BasicState> onEnter() override
+ {
+ // Cleanup after previously mounted device
+ LogMsg(Logger::Debug, "exitCode: ", machine.getExitCode());
+ machine.getTarget() = std::nullopt;
+ machine.getConfig().remainingInactivityTimeout =
+ std::chrono::seconds(0);
+ return nullptr;
+ }
+
+ std::unique_ptr<BasicState> handleEvent(MountEvent event)
+ {
+ if (event.target)
+ {
+ machine.getTarget() = std::move(event.target);
+ }
+ return std::make_unique<ActivatingState>(machine);
+ }
+
+ template <class AnyEvent>
+ std::unique_ptr<BasicState> handleEvent(AnyEvent event)
+ {
+ LogMsg(Logger::Error, "Invalid event: ", event.eventName);
+ return nullptr;
+ }
+
+ std::optional<Error> error;
+};