gomu/anko/anko.go

109 lines
2.1 KiB
Go
Raw Normal View History

2021-02-14 14:35:36 +08:00
package anko
import (
2021-02-14 20:33:24 +08:00
"fmt"
2021-02-14 14:35:36 +08:00
"github.com/mattn/anko/core"
"github.com/mattn/anko/env"
"github.com/mattn/anko/vm"
_ "github.com/mattn/anko/packages"
)
type Anko struct {
env *env.Env
}
func NewAnko() Anko {
2021-02-15 12:37:05 +08:00
env := core.Import(env.NewEnv())
importToX(env)
return Anko{env}
2021-02-14 14:35:36 +08:00
}
2021-02-14 21:37:31 +08:00
// Define defines new symbol and value to the Anko env.
2021-02-14 14:35:36 +08:00
func (a *Anko) Define(symbol string, value interface{}) error {
return a.env.DefineGlobal(symbol, value)
}
2021-02-14 21:37:31 +08:00
// Set sets new value to existing symbol. Use this when change value under an
2021-02-14 14:35:36 +08:00
// existing symbol.
func (a *Anko) Set(symbol string, value interface{}) error {
return a.env.Set(symbol, value)
}
2021-02-14 21:37:31 +08:00
// Get gets value from anko env, returns error if symbol is not found.
2021-02-14 14:35:36 +08:00
func (a *Anko) Get(symbol string) (interface{}, error) {
return a.env.Get(symbol)
}
2021-02-14 21:37:31 +08:00
// GetInt gets int value from symbol, returns golang default value if not found.
2021-02-14 14:35:36 +08:00
func (a *Anko) GetInt(symbol string) int {
v, err := a.env.Get(symbol)
if err != nil {
return 0
}
val, ok := v.(int64)
if !ok {
return 0
}
return int(val)
}
2021-02-14 21:37:31 +08:00
// GetString gets string value from symbol, returns golang default value if not
// found.
2021-02-14 14:35:36 +08:00
func (a *Anko) GetString(symbol string) string {
v, err := a.env.Get(symbol)
if err != nil {
return ""
}
val, ok := v.(string)
if !ok {
return ""
}
return val
}
2021-02-14 21:37:31 +08:00
// GetBool gets bool value from symbol, returns golang default value if not
// found.
2021-02-14 14:35:36 +08:00
func (a *Anko) GetBool(symbol string) bool {
v, err := a.env.Get(symbol)
if err != nil {
return false
}
val, ok := v.(bool)
if !ok {
return false
}
return val
}
2021-02-14 21:37:31 +08:00
// Execute executes anko script.
2021-02-14 14:35:36 +08:00
func (a *Anko) Execute(src string) (interface{}, error) {
return vm.Execute(a.env, nil, src)
}
2021-02-14 20:33:24 +08:00
2021-02-14 21:37:31 +08:00
// KeybindExists checks if keybinding is defined.
func (a *Anko) KeybindExists(panel string, keybind string) bool {
2021-02-15 14:27:45 +08:00
src := fmt.Sprintf("Keybinds.%s.%s", panel, keybind)
2021-02-14 21:37:31 +08:00
val, err := a.Execute(src)
2021-02-14 20:33:24 +08:00
if err != nil {
2021-02-14 21:37:31 +08:00
return false
2021-02-14 20:33:24 +08:00
}
2021-02-14 21:37:31 +08:00
return val != nil
}
2021-02-14 20:33:24 +08:00
2021-02-14 21:37:31 +08:00
// ExecKeybind executes function bounded by the keybinding.
func (a *Anko) ExecKeybind(panel string, keybind string) error {
2021-02-15 14:27:45 +08:00
src := fmt.Sprintf("Keybinds.%s.%s()", panel, keybind)
_, err := a.Execute(src)
return err
2021-02-14 20:33:24 +08:00
}