19 #ifndef IRCCD_JS_FILE_API_HPP
20 #define IRCCD_JS_FILE_API_HPP
27 #include <irccd/sysconfig.hpp>
29 #if defined(IRCCD_HAVE_STAT)
30 # include <sys/types.h>
31 # include <sys/stat.h>
59 file& operator=(
const file&) =
delete;
67 std::function<void (std::FILE*)> destructor_;
77 inline file(std::string path,
const std::string& mode)
78 : path_(
std::move(path))
79 , destructor_([] (
std::FILE* fp) { std::fclose(fp); })
81 if ((stream_ = std::fopen(path_.c_str(), mode.c_str())) ==
nullptr)
82 throw std::runtime_error(std::strerror(errno));
94 inline file(std::FILE* fp, std::function<
void (std::FILE*)> destructor) noexcept
96 , destructor_(std::move(destructor))
98 assert(destructor_ !=
nullptr);
115 inline const std::string&
get_path() const noexcept
136 destructor_(stream_);
151 auto get_name()
const noexcept -> std::string_view
override;
175 static void push(duk_context* ctx, std::shared_ptr<file> fp);
184 static auto require(duk_context* ctx, duk_idx_t index) -> std::shared_ptr<file>;
187 #if defined(IRCCD_HAVE_STAT)
202 static void push(duk_context* ctx,
const struct stat& st);
205 #endif // !IRCCD_HAVE_STAT
211 #endif // !IRCCD_JS_FILE_API_HPP
auto push(duk_context *ctx, T &&value) -> int
Definition: duk.hpp:270
virtual ~file() noexcept
Definition: file_api.hpp:104
void close() noexcept
Definition: file_api.hpp:133
void load(daemon::bot &bot, js::plugin &plugin) override
file(std::FILE *fp, std::function< void(std::FILE *)> destructor) noexcept
Definition: file_api.hpp:94
Javascript namespace.
Definition: api.hpp:42
Irccd.File Javascript API.
Definition: file_api.hpp:146
Javascript plugins for irccd.
Definition: plugin.hpp:44
std::FILE * get_handle() noexcept
Definition: file_api.hpp:125
file(std::string path, const std::string &mode)
Definition: file_api.hpp:77
Irccd main instance.
Definition: bot.hpp:58
Javascript API module.
Definition: api.hpp:51
const std::string & get_path() const noexcept
Definition: file_api.hpp:115
auto get_name() const noexcept -> std::string_view override
Object for Javascript to perform I/O.
Definition: file_api.hpp:56
auto require(duk_context *ctx, duk_idx_t index)
Definition: duk.hpp:314
Operations on different types.
Definition: duk.hpp:254