#pragma once

#include "LibLsp/JsonRpc/serializer.h"

#include <string>
#include <vector>

//Position in a text document expressed as zero - based line and zero - based character offset.
//A position is between two characters like an insert cursor in a editor.Special values like
//for example - 1 to denote the end of a line are not supported.
struct lsPosition
{
    lsPosition();
    lsPosition(int line, int character);

    bool operator==(lsPosition const& other) const;
    bool operator<(lsPosition const& other) const;

    std::string ToString() const;

    /**
         * Line position in a document (zero-based).
         */
    // Note: these are 0-based.
    unsigned line = 0;
    /**
         * Character offset on a line in a document (zero-based). Assuming that
         * the line is represented as a string, the `character` value represents
         * the gap between the `character` and `character + 1`.
         *
         * If the character value is greater than the line length it defaults back
         * to the line length.
         */
    unsigned character = 0;
    static lsPosition const kZeroPosition;

    MAKE_SWAP_METHOD(lsPosition, line, character)
};
MAKE_REFLECT_STRUCT(lsPosition, line, character);
