diff --git a/emote/emote.go b/emote/emote.go index 2fb229b..a73381d 100644 --- a/emote/emote.go +++ b/emote/emote.go @@ -23,23 +23,23 @@ type Emote struct { // // Parser assumes that emotes are bound by whitespace. type Parser struct { - m map[string]string + m map[string]Emote // TODO(branden): more efficient data structure; trie? } // NewParser creates a Parser for the given list of emotes. func NewParser(emotes ...Emote) Parser { - m := make(map[string]string, len(emotes)) + m := make(map[string]Emote, len(emotes)) for _, e := range emotes { - m[e.Name] = e.ID + m[e.Name] = e } return Parser{m} } // Next parses the next emote instance from the message and returns the // remainder of the message text following it. -// If there is no emote in the message the returned emote is the empty string. -func (p Parser) Next(text string) (name, id, following string) { +// If there is no emote in the message the returned emote has an empty ID. +func (p Parser) Next(text string) (emote Emote, following string) { for text != "" { // First trim any existing space. text = strings.TrimSpace(text) @@ -54,12 +54,12 @@ func (p Parser) Next(text string) (name, id, following string) { } else { following = "" } - id = p.m[word] - if id != "" { - return word, id, following + em := p.m[word] + if em.ID != "" { + return em, following } text = following } // No emote found. - return "", "", "" + return Emote{}, "" } diff --git a/emote/emote_test.go b/emote/emote_test.go index 4fd4077..c532cf5 100644 --- a/emote/emote_test.go +++ b/emote/emote_test.go @@ -57,16 +57,16 @@ func TestParser(t *testing.T) { var got []string text := c.text for { - name, id, rest := p.Next(text) - if id == "" { + em, rest := p.Next(text) + if em.ID == "" { break } - if name != id { + if em.Name != em.ID { // Not normally the case, but this test is constructed // so that it is. - t.Errorf("wrong id %q for name %q", id, name) + t.Errorf("wrong id %q for name %q", em.ID, em.Name) } - got = append(got, name) + got = append(got, em.Name) text = rest } if diff := cmp.Diff(c.want, got); diff != "" { @@ -103,7 +103,7 @@ func BenchmarkParser(b *testing.B) { for b.Loop() { text := c.text for text != "" { - _, _, text = p.Next(text) + _, text = p.Next(text) } } })