Commit db94b222 authored by Giuseppe Ottaviano's avatar Giuseppe Ottaviano Committed by Facebook GitHub Bot

Make parseTo work with arbitrary string types

Summary: `to<T>` already works in simple cases when `IsSomeString<T>`; by generalizing `parseTo` any string-like `T` gets full functionality without having to copy-paste the overload.

Reviewed By: yfeldblum

Differential Revision: D26831450

fbshipit-source-id: c09629bb7173dde1e0986654128b8e1d7c48b9ba
parent e9d7342e
......@@ -1462,20 +1462,36 @@ inline Expected<StringPiece, ConversionCode> parseTo(
return StringPiece{in.end(), in.end()};
}
FOLLY_NODISCARD
inline Expected<StringPiece, ConversionCode> parseTo(
StringPiece in, std::string& out) {
namespace detail {
template <class Str>
FOLLY_ERASE Expected<StringPiece, ConversionCode> parseToStr(
StringPiece in, Str& out) {
out.clear();
out.append(in.data(), in.size()); // TODO try/catch?
return StringPiece{in.end(), in.end()};
}
} // namespace detail
FOLLY_NODISCARD
inline Expected<StringPiece, ConversionCode> parseTo(
StringPiece in, std::string& out) {
return detail::parseToStr(in, out);
}
FOLLY_NODISCARD
inline Expected<StringPiece, ConversionCode> parseTo(
StringPiece in, fbstring& out) {
out.clear();
out.append(in.data(), in.size()); // TODO try/catch?
return StringPiece{in.end(), in.end()};
return detail::parseToStr(in, out);
}
template <class Str>
FOLLY_NODISCARD inline typename std::enable_if<
IsSomeString<Str>::value,
Expected<StringPiece, ConversionCode>>::type
parseTo(StringPiece in, Str& out) {
return detail::parseToStr(in, out);
}
namespace detail {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment