// Encode lua data structure into json, and decode them again.
//
// See the doc(http.jsonencode) to read about limitations of the encoder.
//
#pragma once

#include "luastack.hpp"
#include "wrap-string.hpp"
#include <string_view>

namespace json {
    // Encode json.
    //
    // See doc(http.jsonencode) for a lot more information.
    //
    // Returns an error message.  If the error message is an
    // empty string, then the encoding was successful.
    //
    eng::string encode(LuaCoreStack &LS, LuaSlot in, eng::string &out, bool indent, int maxlen);

    // Decode json.
    //
    // See doc(http.jsondecode) for a lot more information.
    //
    // The only error condition is syntactically invalid json.
    // In that case, we return false and set 'out' to the
    // token 'error'.
    //
    bool decode(LuaCoreStack &LS, LuaSlot out, std::string_view in);
}
    

