56 lines
1.8 KiB
C++
56 lines
1.8 KiB
C++
#include "adminive/adapters/drogon.hpp"
|
|
#include "adminive/adapters/nlohmann_json.hpp"
|
|
#include "adminive_test.hpp"
|
|
#include <string>
|
|
namespace real_drogon_test {
|
|
struct Status {
|
|
std::string state{"ready"};
|
|
};
|
|
struct Config {
|
|
std::string name{"real"};
|
|
Status status() {
|
|
return {};
|
|
}
|
|
};
|
|
}
|
|
namespace adminive {
|
|
template <>
|
|
struct Type_Descriptor<real_drogon_test::Status> {
|
|
static auto get() {
|
|
using T = real_drogon_test::Status;
|
|
return object<T>("real_drogon_status", ADMINIVE_FIELD(T, state));
|
|
}
|
|
};
|
|
template <>
|
|
struct Type_Descriptor<real_drogon_test::Config> {
|
|
static auto get() {
|
|
using T = real_drogon_test::Config;
|
|
return object<T>("real_drogon_config", ADMINIVE_FIELD(T, name).editable().creatable());
|
|
}
|
|
};
|
|
template <>
|
|
struct Type_View_Descriptor<real_drogon_test::Config> {
|
|
static Table_View table() {
|
|
using T = real_drogon_test::Config;
|
|
return table_view<T>(column<&T::name>("Name").sort().search());
|
|
}
|
|
};
|
|
}
|
|
int main() {
|
|
using Json = nlohmann::json;
|
|
auto& app = drogon::app();
|
|
real_drogon_test::Config config;
|
|
adminive::Drogon_Resource<real_drogon_test::Config, Json> resource(config, "/real/config");
|
|
resource.bind(app);
|
|
adminive::Drogon_Status_Resource<real_drogon_test::Status, Json> status("/real/status", [](const adminive::Request_Context&) {
|
|
return real_drogon_test::Status{};
|
|
});
|
|
status.bind(app);
|
|
adminive::Drogon_Collection_Resource<real_drogon_test::Config, Json> collection("/real/configs", {config});
|
|
collection.register_status<&real_drogon_test::Config::status>();
|
|
collection.bind(app);
|
|
ADMINIVE_CHECK(resource.view_schema().at("kind") == "form");
|
|
ADMINIVE_CHECK(collection.view_schema().at("kind") == "table");
|
|
return 0;
|
|
}
|