mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-18 01:57:02 +00:00
Signed-off-by: James Hillyerd <james@hillyerd.com> Signed-off-by: James Hillyerd <james@hillyerd.com>
85 lines
1.6 KiB
Go
85 lines
1.6 KiB
Go
package luahost
|
|
|
|
import (
|
|
"net/mail"
|
|
|
|
lua "github.com/yuin/gopher-lua"
|
|
)
|
|
|
|
const mailAddressName = "address"
|
|
|
|
func registerMailAddressType(ls *lua.LState) {
|
|
mt := ls.NewTypeMetatable(mailAddressName)
|
|
ls.SetGlobal(mailAddressName, mt)
|
|
|
|
// Static attributes.
|
|
ls.SetField(mt, "new", ls.NewFunction(newMailAddress))
|
|
|
|
// Methods.
|
|
ls.SetField(mt, "__index", ls.SetFuncs(ls.NewTable(), mailAddressMethods))
|
|
}
|
|
|
|
var mailAddressMethods = map[string]lua.LGFunction{
|
|
"address": mailAddressGetSetAddress,
|
|
"name": mailAddressGetSetName,
|
|
}
|
|
|
|
func newMailAddress(ls *lua.LState) int {
|
|
val := &mail.Address{
|
|
Name: ls.CheckString(1),
|
|
Address: ls.CheckString(2),
|
|
}
|
|
ud := wrapMailAddress(ls, val)
|
|
ls.Push(ud)
|
|
|
|
return 1
|
|
}
|
|
|
|
func wrapMailAddress(ls *lua.LState, val *mail.Address) *lua.LUserData {
|
|
ud := ls.NewUserData()
|
|
ud.Value = val
|
|
ls.SetMetatable(ud, ls.GetTypeMetatable(mailAddressName))
|
|
|
|
return ud
|
|
}
|
|
|
|
func unwrapMailAddress(ud *lua.LUserData) (*mail.Address, bool) {
|
|
val, ok := ud.Value.(*mail.Address)
|
|
return val, ok
|
|
}
|
|
|
|
func checkMailAddress(ls *lua.LState) *mail.Address {
|
|
ud := ls.CheckUserData(1)
|
|
if val, ok := ud.Value.(*mail.Address); ok {
|
|
return val
|
|
}
|
|
ls.ArgError(1, mailAddressName+" expected")
|
|
return nil
|
|
}
|
|
|
|
func mailAddressGetSetAddress(ls *lua.LState) int {
|
|
val := checkMailAddress(ls)
|
|
if ls.GetTop() == 2 {
|
|
// Setter.
|
|
val.Address = ls.CheckString(2)
|
|
return 0
|
|
}
|
|
|
|
// Getter.
|
|
ls.Push(lua.LString(val.Address))
|
|
return 1
|
|
}
|
|
|
|
func mailAddressGetSetName(ls *lua.LState) int {
|
|
val := checkMailAddress(ls)
|
|
if ls.GetTop() == 2 {
|
|
// Setter.
|
|
val.Name = ls.CheckString(2)
|
|
return 0
|
|
}
|
|
|
|
// Getter.
|
|
ls.Push(lua.LString(val.Name))
|
|
return 1
|
|
}
|