33 lines
960 B
Go
33 lines
960 B
Go
package namesys
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
proquint "github.com/bren2010/proquint"
|
|
path "github.com/ipfs/go-path"
|
|
opts "github.com/ipfs/interface-go-ipfs-core/options/namesys"
|
|
)
|
|
|
|
type ProquintResolver struct{}
|
|
|
|
// Resolve implements Resolver.
|
|
func (r *ProquintResolver) Resolve(ctx context.Context, name string, options ...opts.ResolveOpt) (path.Path, error) {
|
|
return resolve(ctx, r, name, opts.ProcessOpts(options))
|
|
}
|
|
|
|
// resolveOnce implements resolver. Decodes the proquint string.
|
|
func (r *ProquintResolver) resolveOnceAsync(ctx context.Context, name string, options opts.ResolveOpts) <-chan onceResult {
|
|
out := make(chan onceResult, 1)
|
|
defer close(out)
|
|
|
|
ok, err := proquint.IsProquint(name)
|
|
if err != nil || !ok {
|
|
out <- onceResult{err: errors.New("not a valid proquint string")}
|
|
return out
|
|
}
|
|
// Return a 0 TTL as caching this result is pointless.
|
|
out <- onceResult{value: path.FromString(string(proquint.Decode(name)))}
|
|
return out
|
|
}
|