From dfc3942087e2fdb920d3decf640a834a0a00cca4 Mon Sep 17 00:00:00 2001 From: sammyette Date: Mon, 10 Jul 2023 23:34:09 -0400 Subject: [PATCH] docs: add more details to module docs --- module.go | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/module.go b/module.go index 83b470f..fb9fd35 100644 --- a/module.go +++ b/module.go @@ -11,21 +11,39 @@ import ( // #interface module // native module loading // #field paths A list of paths to search when loading native modules. This is in the style of Lua search paths and will be used when requiring native modules. Example: `?.so;?/?.so` -/* The hilbish.module interface provides a function -to load Hilbish plugins/modules. -Hilbish modules are Go-written plugins (see https://pkg.go.dev/plugin) -that are used to add functionality to Hilbish that cannot be written -in Lua for any reason. +/* The hilbish.module interface provides a function to load +Hilbish plugins/modules. Hilbish modules are Go-written +plugins (see https://pkg.go.dev/plugin) that are used to add functionality +to Hilbish that cannot be written in Lua for any reason. -To make a valid native module, the Go plugin -has to export a Loader function with a signature like so: -`func(*rt.Runtime) rt.Value`. +Note that you don't ever need to use the load function that is here as +modules can be loaded with a `require` call like Lua C modules, and the +search paths can be changed with the `paths` property here. + +To make a valid native module, the Go plugin has to export a Loader function +with a signature like so: `func(*rt.Runtime) rt.Value`. `rt` in this case refers to the Runtime type at https://pkg.go.dev/github.com/arnodel/golua@master/runtime#Runtime Hilbish uses this package as its Lua runtime. You will need to read it to use it for a native plugin. + +Here is some code for an example plugin: +```go +package main + +import ( + rt "github.com/arnodel/golua/runtime" +) + +func Loader(rtm *rt.Runtime) rt.Value { + return rt.StringValue("hello world!") +} +``` + +This can be compiled with `go build -buildmode=plugin plugin.go`. +If you attempt to require and print the result (`print(require 'plugin')`), it will show "hello world!" */ func moduleLoader(rtm *rt.Runtime) *rt.Table { exports := map[string]util.LuaExport{