src/account/IMigrationStep.hpp¶
Versioned migration manager and migration step interface. More...
Namespaces¶
| Name |
|---|
| sgns |
Classes¶
| Name | |
|---|---|
| class | sgns::IMigrationStep Interface for a migration step between two schema versions. |
Detailed Description¶
Versioned migration manager and migration step interface.
Date: 2025-05-29 Luiz Guilherme Rizzatto Zucchi Henrique A. Klein ([email protected])
Source code¶
#pragma once
#include <string>
#include <tuple>
#include <sstream>
#include "outcome/outcome.hpp"
namespace sgns
{
class IMigrationStep
{
public:
virtual ~IMigrationStep() = default;
virtual std::string FromVersion() const = 0;
virtual std::string ToVersion() const = 0;
virtual outcome::result<void> Init() = 0;
virtual outcome::result<void> Apply() = 0;
virtual outcome::result<void> ShutDown() = 0;
virtual outcome::result<bool> IsRequired() const = 0;
std::tuple<int, int, int> ParseVersion( const std::string &version ) const
{
int major = 0, minor = 0, patch = 0;
char dot;
std::istringstream iss( version );
iss >> major >> dot >> minor >> dot >> patch;
return { major, minor, patch };
}
bool IsVersionLessThan( const std::string &lhs, const std::string &rhs ) const
{
auto [lhs_major, lhs_minor, lhs_patch] = ParseVersion( lhs );
auto [rhs_major, rhs_minor, rhs_patch] = ParseVersion( rhs );
if ( lhs_major != rhs_major )
{
return lhs_major < rhs_major;
}
if ( lhs_minor != rhs_minor )
{
return lhs_minor < rhs_minor;
}
return lhs_patch < rhs_patch;
}
};
} // namespace sgns
Updated on 2026-03-04 at 13:10:44 -0800