Something went wrong. Try again.
forked from tangled.org/core
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package appview
import ( "context" "sync"
"github.com/bluesky-social/indigo/atproto/identity" "github.com/bluesky-social/indigo/atproto/syntax")
type Resolver struct { directory identity.Directory}
func NewResolver() *Resolver { return &Resolver{ directory: identity.DefaultDirectory(), }}
func (r *Resolver) ResolveIdent(ctx context.Context, arg string) (*identity.Identity, error) { id, err := syntax.ParseAtIdentifier(arg) if err != nil { return nil, err }
return r.directory.Lookup(ctx, *id)}
func (r *Resolver) ResolveIdents(ctx context.Context, idents []string) []*identity.Identity { results := make([]*identity.Identity, len(idents)) var wg sync.WaitGroup
done := make(chan struct{}) defer close(done)
for idx, ident := range idents { wg.Add(1) go func(index int, id string) { defer wg.Done()
select { case <-ctx.Done(): results[index] = nil case <-done: results[index] = nil default: identity, _ := r.ResolveIdent(ctx, id) results[index] = identity } }(idx, ident) }
wg.Wait() return results}