ThrowableStringBuilder.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Format.h>
  8. #include <AK/StringBuilder.h>
  9. #include <AK/StringView.h>
  10. #include <LibJS/Forward.h>
  11. #include <LibJS/Runtime/Completion.h>
  12. #include <LibJS/Runtime/ErrorTypes.h>
  13. #include <LibJS/Runtime/VM.h>
  14. namespace JS {
  15. class ThrowableStringBuilder : private AK::StringBuilder {
  16. public:
  17. explicit ThrowableStringBuilder(VM&);
  18. ThrowCompletionOr<void> append(char);
  19. ThrowCompletionOr<void> append(StringView);
  20. ThrowCompletionOr<void> append(Utf16View const&);
  21. ThrowCompletionOr<void> append_code_point(u32 value);
  22. ThrowCompletionOr<String> to_string() const;
  23. template<typename... Parameters>
  24. ThrowCompletionOr<void> appendff(CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
  25. {
  26. AK::VariadicFormatParams<AK::AllowDebugOnlyFormatters::No, Parameters...> variadic_format_params { parameters... };
  27. TRY_OR_THROW_OOM(m_vm, vformat(*this, fmtstr.view(), variadic_format_params));
  28. return {};
  29. }
  30. template<class SeparatorType, class CollectionType>
  31. ThrowCompletionOr<void> join(SeparatorType const& separator, CollectionType const& collection, StringView fmtstr = "{}"sv)
  32. {
  33. TRY_OR_THROW_OOM(m_vm, try_join(separator, collection, fmtstr));
  34. return {};
  35. }
  36. using AK::StringBuilder::is_empty;
  37. using AK::StringBuilder::string_view;
  38. using AK::StringBuilder::trim;
  39. private:
  40. VM& m_vm;
  41. };
  42. }