#ifndef THIRD_PARTY_GBMCWEB_INCLUDE_STR_UTILITY_H_
#define THIRD_PARTY_GBMCWEB_INCLUDE_STR_UTILITY_H_

#include <cstddef>
#include <string>
#include <string_view>
#include <vector>

namespace bmcweb {
// This is a naive replacement for boost::split until
// https://github.com/llvm/llvm-project/issues/40486
// is resolved
inline void split(std::vector<std::string>& strings, std::string_view str,
                  char delim) {
  size_t start = 0;
  size_t end = 0;
  while (end <= str.size()) {
    end = str.find(delim, start);
    strings.emplace_back(str.substr(start, end - start));
    start = end + 1;
  }
}

inline void append_with_sep(std::string& out, const char sep,
                            const std::string& arg) {
  if (!out.empty()) {
    out += sep;
  }
  out += arg;
}

// join 'args' strings with a separator without creating any intermediate
// objects, append to 'out'
template <typename... Args>
void append_with_sep(std::string& out, const char sep, const std::string& arg,
                     const Args&... args) {
  append_with_sep(out, sep, arg);
  append_with_sep(out, sep, args...);
}

}  // namespace bmcweb

#endif  // THIRD_PARTY_GBMCWEB_INCLUDE_STR_UTILITY_H_
