1/*2Maddy Mail Server - Composable all-in-one email server.3Copyright © 2019-2020 Max Mazurov <fox.cpp@disroot.org>, Maddy Mail Server contributors45This program is free software: you can redistribute it and/or modify6it under the terms of the GNU General Public License as published by7the Free Software Foundation, either version 3 of the License, or8(at your option) any later version.910This program is distributed in the hope that it will be useful,11but WITHOUT ANY WARRANTY; without even the implied warranty of12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13GNU General Public License for more details.1415You should have received a copy of the GNU General Public License16along with this program. If not, see <https://www.gnu.org/licenses/>.17*/1819package table2021import (22 "context"2324 "github.com/foxcpp/maddy/framework/config"25 "github.com/foxcpp/maddy/framework/module"26)2728type Static struct {29 modName string30 instName string3132 m map[string][]string33}3435func NewStatic(modName, instName string, _, _ []string) (module.Module, error) {36 return &Static{37 modName: modName,38 instName: instName,39 m: map[string][]string{},40 }, nil41}4243func (s *Static) Init(cfg *config.Map) error {44 cfg.Callback("entry", func(_ *config.Map, node config.Node) error {45 if len(node.Args) < 2 {46 return config.NodeErr(node, "expected at least one value")47 }48 s.m[node.Args[0]] = node.Args[1:]49 return nil50 })51 _, err := cfg.Process()52 return err53}5455func (s *Static) Name() string {56 return s.modName57}5859func (s *Static) InstanceName() string {60 return s.modName61}6263func (s *Static) Lookup(ctx context.Context, key string) (string, bool, error) {64 val := s.m[key]65 if len(val) == 0 {66 return "", false, nil67 }68 return val[0], true, nil69}7071func (s *Static) LookupMulti(ctx context.Context, key string) ([]string, error) {72 return s.m[key], nil73}7475func init() {76 module.Register("table.static", NewStatic)77}