Fender is still in alpha so any element is subject to, and likely to, breaking changes
plugins are a way to add rust interop to fender
they work as though you were adding to the standard library of fender itself but
Much of the following structure will not be written by hand in the future but will be generated from attribute macros
each rust library can only expose 1 plugin currently
to expose a plugin use the declare_plugin
macro from fender
, this will take in a plugin
and a constructor.
the constructor is just a function that takes no args and return an instance of your plugin
. This function could follow the rust convention of adding a new
function in an impl block on the struct, implementing default on the struct, or just a free function that fits the pointer type
The plugin
itself is a struct that implements the Plugin
trait from the fender
crate.
The fields of the struct should only consist of FenderPluginFunction
and FenderValue
.
to implement the Plugin
trait you need 3 functions name
, get_functions
, and get_values
name
doesn't do much of anything at the moment but it will be a way to refer to the plugin from inside of fender
get_functions
and get_values
each return a HashMap
of references to either the FenderPluginFunction
or FenderValue
held by the plugin
respectively.
The key used in the hashmap is the name used to access it in fender so should follow the camel case convention that fender uses.
until the tooling for fender Plugins is refined both fender
and freight_vm
will need to
be added as dependencies. It is recommended to use the version of Freight used by the version of Fender that is being depended on
for fender
, default-features
can be set to false
, as the fender repl is likely not needed for plugins
for freight_vm
the variadic_functions
feature should be enabled
under the [lib]
section crate type should be set to ["dylib"]