#pragma once #include #include #include namespace rack { namespace plugin { struct Model; // Subclass this and return a pointer to a new one when init() is called struct Plugin { /** List of models contained in this plugin. Add with addModel(). */ std::list models; /** The file path to the plugin's directory. */ std::string path; /** OS-dependent library handle. */ void* handle = NULL; /** Must be unique. Used for saving patches. Never change this after releasing your plugin. To guarantee uniqueness, it is a good idea to prefix the slug by your "company name" if available, e.g. "MyCompany-MyPlugin" */ std::string slug; /** Your plugin's latest version. Do not include the "v" prefix. */ std::string version; /** The license type of your plugin. Use "proprietary" if all rights are reserved. If your license is in the [SPDX license list](https://spdx.org/licenses/), use its abbreviation in the "Identifier" column. */ std::string license; /** Human-readable display name for your plugin. You can change this on a whim, unlike slugs. */ std::string name; /** Prefix of each module name in the Module Browser. If blank, `name` is used. */ std::string brand; /** A one-line summary of the plugin's purpose. If your plugin doesn't follow a theme, it’s probably best to omit this. */ std::string description; /** Your name, company, alias, or GitHub username. */ std::string author; /** Your email address for support inquiries. */ std::string authorEmail; /** Homepage of the author. */ std::string authorUrl; /** Homepage featuring the plugin itself. */ std::string pluginUrl; /** The manual of your plugin. HTML, PDF, or GitHub readme/wiki are fine. */ std::string manualUrl; /** The source code homepage. E.g. GitHub repo. */ std::string sourceUrl; /** Link to donation page for users who wish to donate. E.g. PayPal URL. */ std::string donateUrl; /** Link to the changelog of the plugin. */ std::string changelogUrl; /** Last modified timestamp of the plugin directory. */ double modifiedTimestamp = -INFINITY; ~Plugin(); void addModel(Model* model); Model* getModel(const std::string& slug); void fromJson(json_t* rootJ); void modulesFromJson(json_t* rootJ); std::string getBrand(); }; } // namespace plugin } // namespace rack