#pragma once
#include <luna/Result.h>

class OwnedStringView
{
  public:
    OwnedStringView(char* c_str);
    OwnedStringView(char* c_str, usize length);
    OwnedStringView();
    OwnedStringView(OwnedStringView&&);
    OwnedStringView(const OwnedStringView&) = delete;
    ~OwnedStringView();

    Result<OwnedStringView> clone() const;

    Result<OwnedStringView> substring(usize begin, usize size) const;

    static Result<OwnedStringView> from_string_literal(const char* str);

    const char* chars() const
    {
        return m_string;
    }

    usize length() const
    {
        return m_length;
    }

    const char& operator[](usize) const;

  private:
    char* m_string { nullptr };
    usize m_length { 0 };
};