I had forgotten to implement Tags.FindAll()

This commit is contained in:
fiatjaf 2025-03-10 02:58:31 -03:00
parent 459273216c
commit d430b8c9ed
2 changed files with 15 additions and 1 deletions

View File

@ -1,6 +1,7 @@
package nostr
import (
"slices"
"testing"
"github.com/stretchr/testify/assert"
@ -18,7 +19,7 @@ func TestTagHelpers(t *testing.T) {
assert.Nil(t, tags.Find("x"), "Find shouldn't have returned a tag with a single item")
assert.NotNil(t, tags.FindWithValue("p", "abcdef"), "failed to get with existing prefix")
assert.Equal(t, "ffffff", tags.FindLast("e")[1], "failed to get last")
assert.Equal(t, 2, len(tags.GetAll([]string{"e", ""})), "failed to get all")
assert.Equal(t, 2, len(slices.Collect(tags.FindAll("e"))), "failed to get all")
c := make(Tags, 0, 2)
for _, tag := range tags.All([]string{"e", ""}) {
c = append(c, tag)

13
tags.go
View File

@ -156,6 +156,19 @@ func (tags Tags) Find(key string) Tag {
return nil
}
// FindAll yields all the tags the given key/tagName that also have one value (i.e. at least 2 items)
func (tags Tags) FindAll(key string) iter.Seq[Tag] {
return func(yield func(Tag) bool) {
for _, v := range tags {
if len(v) >= 2 && v[0] == key {
if !yield(v) {
return
}
}
}
}
}
// FindWithValue is like Find, but also checks if the value (the second item) matches
func (tags Tags) FindWithValue(key, value string) Tag {
for _, v := range tags {