59 lines
970 B
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
|
|
}
|