366 {
368
370
372
373 if( additional_fields ) {
374 for( const auto& e : *additional_fields ) {
375 if( e.key().compare( "feature_digest" ) != 0 )
376 mvo( e.key(), e.value() );
377 }
378 }
379
380 if( include_subjective_restrictions ) {
382
383 subjective_restrictions(
"enabled",
enabled );
386
387 mvo( "subjective_restrictions", std::move( subjective_restrictions ) );
388 }
389
393
395 auto add_to_specification = [&specification](
const char* key_name,
auto&&
value ) {
397 obj( "name", key_name );
398 obj(
"value", std::forward<
decltype(
value)>(
value ) );
399 specification.emplace_back( std::move(obj) );
400 };
401
402
404
405 mvo( "specification", std::move( specification ) );
406
408 }
#define SYS_ASSERT(expr, exc_type, FORMAT,...)
An order-preserving dictionary of variants.
stores null, int64, uint64, double, bool, string, std::vector<variant>, and variant_object's.
static const char * feature_type_string
std::vector< fc::variant > variants
const char * builtin_protocol_feature_codename(builtin_protocol_feature_t)
bool preactivation_required
digest_type feature_digest
flat_set< digest_type > dependencies
std::optional< builtin_protocol_feature_t > builtin_feature
time_point earliest_allowed_activation_time
digest_type description_digest