1 #pragma once 2 #include "ConfigVariable.h" 3 #include "net/address_utils.h" 4 #include "core/types.h" 5 6 bool is_not_invalid_doid(const doid_t& id); 7 bool is_not_reserved_doid(const doid_t& id); 8 bool is_not_invalid_channel(const channel_t& c); 9 bool is_not_reserved_channel(const channel_t& c); 10 bool is_boolean_keyword(const std::string& str); 11 bool is_existing_and_readable_file(const std::string& file); 12 13 class BooleanValueConstraint : public RawConfigConstraint<bool> 14 { 15 public: BooleanValueConstraint(ConfigVariable<bool> & var)16 BooleanValueConstraint(ConfigVariable<bool>& var) : 17 RawConfigConstraint(is_boolean_keyword, var, 18 "Boolean value must be either \"true\" or \"false\".") 19 { 20 } 21 }; 22 class InvalidDoidConstraint : public ConfigConstraint<doid_t> 23 { 24 public: InvalidDoidConstraint(ConfigVariable<doid_t> & var)25 InvalidDoidConstraint(ConfigVariable<doid_t>& var) : 26 ConfigConstraint(is_not_invalid_doid, var, 27 "Doid value cannot be INVALID_DOID (0).") 28 { 29 } 30 }; 31 class ReservedDoidConstraint : public ConfigConstraint<doid_t> 32 { 33 public: ReservedDoidConstraint(ConfigVariable<doid_t> & var)34 ReservedDoidConstraint(ConfigVariable<doid_t>& var) : 35 ConfigConstraint(is_not_reserved_doid, var, 36 "Doid value cannot be reserved doid (1 - 999).") 37 { 38 } 39 }; 40 class InvalidChannelConstraint : public ConfigConstraint<channel_t> 41 { 42 public: InvalidChannelConstraint(ConfigVariable<channel_t> & var)43 InvalidChannelConstraint(ConfigVariable<channel_t>& var) : 44 ConfigConstraint(is_not_invalid_channel, var, 45 "Channel value cannot be INVALID_CHANNEL (0).") 46 { 47 } 48 }; 49 class ReservedChannelConstraint : public ConfigConstraint<channel_t> 50 { 51 public: ReservedChannelConstraint(ConfigVariable<channel_t> & var)52 ReservedChannelConstraint(ConfigVariable<channel_t>& var) : 53 ConfigConstraint(is_not_reserved_channel, var, 54 "Channel value cannot be in a reserved channel range.") 55 { 56 } 57 }; 58 class ValidAddressConstraint : public ConfigConstraint<std::string> 59 { 60 public: ValidAddressConstraint(ConfigVariable<std::string> & var)61 ValidAddressConstraint(ConfigVariable<std::string>& var) : 62 ConfigConstraint(is_valid_address, var, 63 "String is not a valid IPv4/IPv6 address or hostname.") 64 { 65 } 66 }; 67 class FileAvailableConstraint : public ConfigConstraint<std::string> 68 { 69 public: FileAvailableConstraint(ConfigVariable<std::string> & var)70 FileAvailableConstraint(ConfigVariable<std::string>& var) : 71 ConfigConstraint(is_existing_and_readable_file, var, 72 "File could not be found/opened.") 73 { 74 } 75 }; 76