10#include "units/base.h"
28 virtual bool Save(
const T& homePosition) = 0;
36 [[nodiscard]]
virtual std::optional<T>
Load() = 0;
54 bool Save(
const T& homePosition)
override {
57 std::ofstream configFile(
GetFilePath(), std::ios::out);
58 if (configFile.good()) {
59 configFile << homePosition.template to<double>();
60 if (!configFile.good()) {
61 std::cout <<
"[ERROR] Could not write to config file\n";
65 std::cout <<
"[ERROR] Could not open config file\n";
72 std::cout <<
"[ERROR] Could not write to config file\n";
77 std::optional<T>
Load()
override {
80 std::ifstream configFile(
GetFilePath(), std::ios::in);
82 configFile >> homePosition;
86 return units::make_unit<T>(homePosition);
92 std::cout <<
"[ERROR] Could not read from config file\n";
99 static const fs::path homeDir{
"/home/lvuser"};
100 static const fs::path configFile{homeDir /
m_homesPath};
102 std::cout <<
"############# Path: " << configFile <<
'\n';
105 if (!fs::exists(configFile)) {
106 fs::create_directories(configFile.parent_path());
107 std::ofstream newFile(configFile);
Saves and loads home positions from filesystem.
Definition: homing_storage_interface.h:45
std::optional< T > Load() override
Load home position from persistent storage.
Definition: homing_storage_interface.h:77
bool Save(const T &homePosition) override
Save home position to persistent storage.
Definition: homing_storage_interface.h:54
fs::path GetFilePath()
Definition: homing_storage_interface.h:98
const fs::path m_homesPath
Definition: homing_storage_interface.h:114
FSHomingStorage(const fs::path &homeFilePath)
Construct a new FSHomingStorage object.
Definition: homing_storage_interface.h:52
Interface capable of saving and loading home positions from persistent storage.
Definition: homing_storage_interface.h:19
virtual std::optional< T > Load()=0
Load home position from persistent storage.
virtual bool Save(const T &homePosition)=0
Save home position to persistent storage.