// AUTOGENERATED COPYRIGHT HEADER START
// Copyright (C) 2020-2023 Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
// AUTOGENERATED COPYRIGHT HEADER END

#pragma once
#include "warning-disable.hpp"
#include <filesystem>
#include <memory>
#include <string_view>

#include <obs.h>
#include "warning-enable.hpp"

namespace streamfx::util {
	class library {
		void* _library;
		bool  _owner;

		public:
		library(std::filesystem::path file);
		library(obs_module_t* library);
		~library();

		void* load_symbol(std::string_view name);

		public:
		static std::shared_ptr<::streamfx::util::library> load(std::filesystem::path file);

		static std::shared_ptr<::streamfx::util::library> load(std::string_view name);

		static std::shared_ptr<::streamfx::util::library> load(obs_module_t* instance);
	};
} // namespace streamfx::util
