|  | #pragma once
#include "common.hpp"
#include "plugin/Plugin.hpp"
#include <jansson.h>
#include <set>
namespace rack {
namespace app {
	struct ModuleWidget;
} // namespace app
namespace engine {
	struct Module;
} // namespace engine
namespace plugin {
struct Model {
	Plugin *plugin = NULL;
	std::vector<std::string> presetPaths;
	/** Must be unique. Used for saving patches. Never change this.
	The model slug must be unique within your plugin, but it doesn't need to be unique among different plugins.
	*/
	std::string slug;
	/** Human readable name for your model, e.g. "Voltage Controlled Oscillator" */
	std::string name;
	/** List of tags representing the function(s) of the module */
	std::vector<std::string> tags;
	/** A one-line summary of the module's purpose */
	std::string description;
	virtual ~Model() {}
	/** Creates a headless Module */
	virtual engine::Module *createModule() { return NULL; }
	/** Creates a ModuleWidget with a Module attached */
	virtual app::ModuleWidget *createModuleWidget() { return NULL; }
	/** Creates a ModuleWidget with no Module, useful for previews */
	virtual app::ModuleWidget *createModuleWidgetNull() { return NULL; }
	void fromJson(json_t *rootJ);
};
} // namespace plugin
} // namespace rack
 |