#pragma once

#include <util/generic/vector.h>
#include <util/string/split.h>
#include <util/string/strip.h>

//! Converts string to vector of type T variables
template <typename T, typename TStringType, typename TDelim = char>
bool TryParseStringToVector(const TStringType& input, TVector<T>& result, const TDelim delim = ',', const bool useEmpty = true) {
    T currentValue;
    for (const auto& t : StringSplitter(input).Split(delim)) {
        auto sb = StripString(t.Token());
        if (!useEmpty && !sb) {
            continue;
        }
        if (!TryFromString<T>(sb, currentValue)) {
            return false;
        }
        result.push_back(currentValue);
    }
    return true;
}