mayhem-party/src/device/input/wrap/remap.go

59 lines
970 B
Go

package wrap
import (
"mayhem-party/src/device/input/button"
"mayhem-party/src/device/input/raw"
"os"
"github.com/go-yaml/yaml"
)
type Remap struct {
input Wrap
m map[byte]byte
}
func NewRemapFromFile(input Wrap, p string) Remap {
b, err := os.ReadFile(p)
if err != nil {
panic(err)
}
var m map[string]string
if err := yaml.Unmarshal(b, &m); err != nil {
panic(err)
}
remap := map[byte]byte{}
for k, v := range m {
if len(k) != 1 || len(v) != 1 {
panic("remap must be char:char")
}
remap[k[0]] = v[0]
}
return NewRemap(input, remap)
}
func NewRemap(input Wrap, m map[byte]byte) Remap {
return Remap{
input: input,
m: m,
}
}
func (re Remap) CloseWrap() raw.Raw {
return re.input.CloseWrap()
}
func (re Remap) Close() {
re.input.Close()
}
func (re Remap) Read() []button.Button {
result := re.input.Read()
for i := range result {
if v, ok := re.m[result[i].Char]; ok {
result[i].Char = v
}
}
return result
}