Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions cpp/Platform.Interfaces.Tests/Platform.Interfaces.Tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,4 +140,17 @@ namespace Platform::Interfaces::Tests {
ASSERT_TRUE((CSetter<EmptyProperty, int, int&>));
}
}

TEST(CompileTests, Cli) {
struct EmptyCli : public ICli {
int Run(const std::vector<std::string>& args) override { return 0; }
};
static_assert(CCli<EmptyCli>);

{
CCli auto cli = EmptyCli{};

ASSERT_TRUE((CCli<EmptyCli>));
}
}
} // namespace Platform::Interfaces::Tests
12 changes: 12 additions & 0 deletions cpp/Platform.Interfaces/CCli.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once

#include <concepts>
#include <string>
#include <vector>

namespace Platform::Interfaces {
template <typename TSelf>
concept CCli = requires(TSelf self, const std::vector<std::string>& args) {
{ self.Run(args) } -> std::same_as<int>;
};
} // namespace Platform::Interfaces
28 changes: 28 additions & 0 deletions cpp/Platform.Interfaces/ICli.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#pragma once

#include <string>
#include <vector>

namespace Platform::Interfaces {
/// <summary>
/// <para>Defines command line interfaces for command that interacts with an operating system.</para>
/// <para>Определяет интерфейс командной строки, для команды взаимодействующей с операционной системой.</para>
/// </summary>
struct ICli {
/// <summary>
/// <para>Runs a command.</para>
/// <para>Запускает команду.</para>
/// </summary>
/// <param name="args">
/// <para>Arguments for a command.</para>
/// <para>Аргументы для команды.</para>
/// </param>
/// <returns>
/// <para>Returns command's exit code.</para>
/// <para>Возвращает код выхода команды.</para>
/// </returns>
virtual int Run(const std::vector<std::string>& args) = 0;

virtual ~ICli() = default;
};
} // namespace Platform::Interfaces
2 changes: 2 additions & 0 deletions cpp/Platform.Interfaces/Platform.Interfaces.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "CProvider.h"
#include "CSetter.h"
#include "CProperty.h"
#include "CCli.h"

#include "ICounter[TResult, TArgument].h"
#include "ICounter[TResult].h"
Expand All @@ -25,6 +26,7 @@
#include "IProvider[TProvided].h"
#include "ISetter[TValue, TArgument].h"
#include "ISetter[TValue].h"
#include "ICli.h"

#include "Polymorph.h"

Expand Down
Loading