Select Git revision
-
Kevin Lyda authoredKevin Lyda authored
modules.go 1.19 KiB
// Package module implements all the modules.
// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
package modules
import (
"fmt"
"gopkg.in/yaml.v3"
)
// ParamsInterface is the interface for module paramaters.
type ParamsInterface interface {
Name() string
OnClick() string
Render() string
}
// Module defines a module.
type Module struct {
Module string `yaml:"module"`
Name string `yaml:"name"`
OnClick string `yaml:"on-click"`
Params ParamsInterface `yaml:"-"`
}
// M is an intermidiate type to avoid name collisions.
type M Module
// Params is the structure for module specific params.
type Params struct {
*M `yaml:",inline"`
Params yaml.Node `yaml:"params"`
}
// UnmarshalYAML is a helper program to unmarshall the specific params.
func (m *Module) UnmarshalYAML(node *yaml.Node) error {
params := &Params{M: (*M)(m)}
if err := node.Decode(params); err != nil {
return err
}
switch params.Module {
case "date":
m.Params = NewDate(m)
case "text":
m.Params = NewText(m)
default:
return fmt.Errorf("module '%s' is unknown", params.Module)
}
return params.Params.Decode(m.Params)
}
func (m *Module) Render() string {
return m.Params.Render()
}