@@ -201,7 +201,7 @@ std::map<std::string,std::map<size_t,size_t>> nested_map={
201201 {"field1",{{1,5},{2,50}}},
202202 {"field3",{}}
203203 };
204- validate (neted_map ,v,err);
204+ validate (nested_map ,v,err);
205205if (err)
206206{
207207 std::cerr << err.message() << std::endl;
@@ -272,38 +272,54 @@ struct Foo
272272DRACOSHA_VALIDATOR_PROPERTY (bar_value);
273273DRACOSHA_VALIDATOR_PROPERTY (other_value);
274274
275+ // template specialization for setting bar_value member of Foo type
276+ DRACOSHA_VALIDATOR_NAMESPACE_BEGIN
277+
278+ template <>
279+ struct set_member_t <Foo,DRACOSHA_VALIDATOR_PROPERTY_TYPE(bar_value)>
280+ {
281+ template <typename ObjectT, typename MemberT, typename ValueT>
282+ void operator() (
283+ ObjectT& obj,
284+ MemberT&&,
285+ ValueT&& val
286+ ) const
287+ {
288+ obj.set_bar_value(std::forward<ValueT >(val));
289+ }
290+ };
291+
292+ DRACOSHA_VALIDATOR_NAMESPACE_END
293+
294+ using namespace DRACOSHA_VALIDATOR_NAMESPACE;
295+
275296// define validator of custom properties
276297auto v=validator(
277298 _ [ bar_value] ( ilex_ne,"UNKNOWN" ) , // case insensitive lexicographical not equal
278299 _ [ other_value] ( gte,1000 )
279300);
280301
281- // object setter that performs data pre-validation and prints validation error
282302Foo foo_instance;
283- auto bar_value_setter = [&v,&foo_instance] (std::string val)
284- {
285- error_report err;
286- validate (_ [ bar_value] ,val,v,err);
287- if (err)
288- {
289- std::cerr << err.message() << std::endl;
290- return false;
291- }
292303
293- foo_instance.set_bar_value(std::move(val));
294- return true;
295- };
304+ error_report err;
305+
306+ // call setter with valid data
307+ set_validated(foo_instance,bar_value,"Hello world",v,err);
308+ if (!err)
309+ {
310+ // object's member is set
311+ }
296312
297- // call object setter with valid data
298- auto ok=bar_value_setter( " Hello world " );
299- // ok == true
300-
301- // call object setter with invalid data
302- ok=bar_value_setter( " unknown " ) ;
303- // ok == false
304- /* prints:
305-
306- "bar_value must be not equal to UNKNOWN"
307-
308- */
313+ // call setter with invalid data
314+ set_validated(foo_instance,bar_value,"unknown",v,err );
315+ if (err)
316+ {
317+ // object's member is not set
318+ std::cerr << err.message() << std::endl ;
319+ / * prints:
320+
321+ "bar_value must be not equal to UNKNOWN"
322+
323+ * /
324+ }
309325```
0 commit comments