Skip to content

Commit c0a36e6

Browse files
committed
Update README.md
1 parent 52c9ae0 commit c0a36e6

1 file changed

Lines changed: 42 additions & 26 deletions

File tree

README.md

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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);
205205
if (err)
206206
{
207207
std::cerr << err.message() << std::endl;
@@ -272,38 +272,54 @@ struct Foo
272272
DRACOSHA_VALIDATOR_PROPERTY(bar_value);
273273
DRACOSHA_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
276297
auto 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
282302
Foo 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

Comments
 (0)