sjansen/messageformat

View on GitHub
internal/compiler/select.go

Summary

Maintainability
A
0 mins
Test Coverage
package compiler

import (
    "fmt"
    "strings"

    "github.com/sjansen/messageformat/ast"
    "golang.org/x/text/language"
)

type selectArg struct {
    ArgID    string
    Messages map[string]*Message
}

func newSelectArg(lang language.Tag, s *ast.SelectArg) (*selectArg, error) {
    messages := make(map[string]*Message, len(s.Messages))
    for k, v := range s.Messages {
        msg, err := compile(lang, v, nil)
        if err != nil {
            return nil, err
        }
        messages[k] = msg
    }
    return &selectArg{
        ArgID:    s.ArgID,
        Messages: messages,
    }, nil
}

func (s *selectArg) format(b *strings.Builder, lang language.Tag, arguments map[string]interface{}) error {
    value, ok := arguments[s.ArgID]
    if !ok {
        return fmt.Errorf("missing arg: %q", s.ArgID)
    }
    str, ok := value.(string)
    if !ok {
        return fmt.Errorf("expected string got: %T", value)
    }
    msg, ok := s.Messages[str]
    if !ok {
        return fmt.Errorf("unmatched select: %q", value)
    }
    return msg.format(b, lang, arguments)
}