X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/e5499c61083684b28bcbc6950aae66cbf0938703..e9ae1f101b5418c0ba2e6c9d86b23c12f0140982:/libs/srvconf/parsers/optional_utils.h diff --git a/libs/srvconf/parsers/optional_utils.h b/libs/srvconf/parsers/optional_utils.h new file mode 100644 index 00000000..9b6054bc --- /dev/null +++ b/libs/srvconf/parsers/optional_utils.h @@ -0,0 +1,138 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#pragma once + +#include "stg/optional.h" +#include "stg/common.h" + +#include +#include + +namespace STG +{ + +template +inline +void appendTag(std::ostream& stream, const std::string& name, const T& value) +{ + stream << "<" << name << " value=\"" << value << "\"/>"; +} + +template +inline +void appendTag(std::ostream& stream, const std::string& name, size_t suffix, const T& value) +{ + stream << "<" << name << suffix << " value=\"" << value << "\"/>"; +} + +template <> +inline +void appendTag(std::ostream& stream, const std::string& name, const uint8_t& value) +{ + stream << "<" << name << " value=\"" << static_cast(value) << "\"/>"; +} + +template <> +inline +void appendTag(std::ostream& stream, const std::string& name, const int8_t& value) +{ + stream << "<" << name << " value=\"" << static_cast(value) << "\"/>"; +} + +template +inline +void appendAttr(std::ostream& stream, const std::string& name, const T& value) +{ + stream << " " << name << "=\"" << value << "\""; +} + +template +inline +void appendAttr(std::ostream& stream, const std::string& name, size_t suffix, const T& value) +{ + stream << " " << name << suffix << "=\"" << value << "\""; +} + +template <> +inline +void appendAttr(std::ostream& stream, const std::string& name, const uint8_t& value) +{ + stream << " " << name << "=\"" << static_cast(value) << "\""; +} + +template <> +inline +void appendAttr(std::ostream& stream, const std::string& name, const int8_t& value) +{ + stream << " " << name << "=\"" << static_cast(value) << "\""; +} + +template +inline +void appendResetableTag(std::ostream& stream, const std::string& name, const T& value) +{ + if (!value.empty()) + appendTag(stream, name, value.const_data()); +} + +template +inline +void appendResetableTag(std::ostream& stream, const std::string& name, size_t suffix, const T& value) +{ + if (!value.empty()) + appendTag(stream, name, suffix, value.const_data()); +} + +template +inline +void appendResetableAttr(std::ostream& stream, const std::string& name, const T& value) +{ + if (!value.empty()) + appendAttr(stream, name, value.const_data()); +} + +template +inline +void appendResetableAttr(std::ostream& stream, const std::string& name, size_t suffix, const T& value) +{ + if (!value.empty()) + appendAttr(stream, name, suffix, value.const_data()); +} + +inline +Optional maybeEncode(const Optional& value) +{ + Optional res; + if (!value.empty()) + res = Encode12str(value.data()); + return res; +} + +inline +Optional maybeIconv(const Optional& value, const std::string& fromEncoding, const std::string& toEncoding) +{ + Optional res; + if (!value.empty()) + res = IconvString(value.data(), fromEncoding, toEncoding); + return res; +} + +} // namespace STG