首次提交
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
#include <structive/property/extensions/presentation.hpp>
|
||||
#include <cstdio>
|
||||
#include <type_traits>
|
||||
#include <cstdlib>
|
||||
using namespace structive;
|
||||
#define REQUIRE(expression) do { if (!(expression)) { std::fprintf(stderr, "REQUIRE failed: %s:%d: %s\n", __FILE__, __LINE__, #expression); std::abort(); } } while (false)
|
||||
struct Device : Property_Object<Device> {
|
||||
int temperature{20};
|
||||
int pressure{100};
|
||||
};
|
||||
template <>
|
||||
struct structive::Type_Descriptor<Device> {
|
||||
static auto get() {
|
||||
return object<Device>(
|
||||
defaults(external_access<External_Access::read>, presentation::group < "Environment" >),
|
||||
field < &Device::temperature > (key < "temperature" >, presentation::label < "Temperature" >, presentation::order < 2 >),
|
||||
field < &Device::pressure > (key < "pressure" >)
|
||||
);
|
||||
}
|
||||
};
|
||||
int main() {
|
||||
Device device;
|
||||
const auto& temperature = device.schema().property<&Device::temperature>();
|
||||
static_assert(std::remove_cvref_t<decltype(temperature)>::template has_attribute<presentation::Label_Category>);
|
||||
auto temperature_info = presentation::describe < &Device::temperature > (device.schema());
|
||||
auto pressure_info = presentation::describe < &Device::pressure > (device.schema());
|
||||
REQUIRE(temperature_info.label == "Temperature");
|
||||
REQUIRE(temperature_info.order == 2);
|
||||
REQUIRE(temperature_info.has_order);
|
||||
REQUIRE(pressure_info.label == "pressure");
|
||||
REQUIRE(pressure_info.group == "Environment");
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user