+struct ServiceConfOpt
+{
+ ServiceConfOpt() = default;
+
+ explicit ServiceConfOpt(const ServiceConf& rhs)
+ : name(rhs.name), comment(rhs.comment),
+ cost(rhs.cost), payDay(rhs.payDay)
+ {}
+
+ ServiceConfOpt(const ServiceConfOpt&) = default;
+ ServiceConfOpt& operator=(const ServiceConfOpt&) = default;
+ ServiceConfOpt(ServiceConfOpt&&) = default;
+ ServiceConfOpt& operator=(ServiceConfOpt&&) = default;
+
+ ServiceConfOpt& operator=(const ServiceConf& conf)
+ {
+ name = conf.name;
+ comment = conf.comment;
+ cost = conf.cost;
+ payDay = conf.payDay;
+ return *this;
+ }
+
+ void splice(const ServiceConfOpt& rhs)
+ {
+ name.splice(rhs.name);
+ comment.splice(rhs.comment);
+ cost.splice(rhs.cost);
+ payDay.splice(rhs.payDay);
+ }
+
+ ServiceConf get(const ServiceConf& defaultValue) const noexcept
+ {
+ ServiceConf res;
+ res.name = name.get(defaultValue.name);
+ res.comment = comment.get(defaultValue.comment);
+ res.cost = cost.get(defaultValue.cost);
+ res.payDay = payDay.get(defaultValue.payDay);
+ return res;
+ }
+
+ Optional<std::string> name;
+ Optional<std::string> comment;
+ Optional<double> cost;
+ Optional<uint8_t> payDay;
+};