Add lookup catalog boolean helpers

This commit is contained in:
Virgil 2026-04-04 06:45:34 +00:00
parent 321d88b3a6
commit 0cf76807c2
2 changed files with 118 additions and 0 deletions

46
lns.go
View file

@ -614,6 +614,29 @@ func GetLookupCatalogName[T any](
return LookupCatalogName(name, byLabel, byHash)
}
// HasLookupCatalogName reports whether LookupCatalogName can resolve the input.
//
// ok := lns.HasLookupCatalogName(name, byLabel, byHash)
func HasLookupCatalogName[T any](
name any,
byLabel func(string) (T, bool),
byHash func(primitives.Hash) (T, bool),
) bool {
_, ok := LookupCatalogName(name, byLabel, byHash)
return ok
}
// GetHasLookupCatalogName is an alias for HasLookupCatalogName.
//
// ok := lns.GetHasLookupCatalogName(name, byLabel, byHash)
func GetHasLookupCatalogName[T any](
name any,
byLabel func(string) (T, bool),
byHash func(primitives.Hash) (T, bool),
) bool {
return HasLookupCatalogName(name, byLabel, byHash)
}
func lookupCatalogName[T any](
name any,
byLabel func(string) (T, bool),
@ -648,6 +671,29 @@ func (s *Service) GetLookupCatalogName(
return s.LookupCatalogName(name, byLabel, byHash)
}
// HasLookupCatalogName reports whether LookupCatalogName can resolve the input.
//
// ok := svc.HasLookupCatalogName(name, byLabel, byHash)
func (s *Service) HasLookupCatalogName(
name any,
byLabel func(string) (any, bool),
byHash func(primitives.Hash) (any, bool),
) bool {
_, ok := s.LookupCatalogName(name, byLabel, byHash)
return ok
}
// GetHasLookupCatalogName is an alias for HasLookupCatalogName.
//
// ok := svc.GetHasLookupCatalogName(name, byLabel, byHash)
func (s *Service) GetHasLookupCatalogName(
name any,
byLabel func(string) (any, bool),
byHash func(primitives.Hash) (any, bool),
) bool {
return s.HasLookupCatalogName(name, byLabel, byHash)
}
// Resolve returns the canonical hash for a validated .lthn name.
//
// This is the package-level convenience wrapper around Service.Resolve.

View file

@ -520,6 +520,34 @@ func TestLookupCatalogNamePreservesDottedLabels(t *testing.T) {
t.Fatalf("GetLookupCatalogName should alias LookupCatalogName, got %q ok=%v", got, ok)
}
if !HasLookupCatalogName(
"foo.bar",
func(name string) (string, bool) {
item, ok := byLabel[name]
return item, ok
},
func(name primitives.Hash) (string, bool) {
item, ok := byHash[name]
return item, ok
},
) {
t.Fatal("HasLookupCatalogName should report a dotted raw label match")
}
if !GetHasLookupCatalogName(
"FOO.BAR.LTHN",
func(name string) (string, bool) {
item, ok := byLabel[name]
return item, ok
},
func(name primitives.Hash) (string, bool) {
item, ok := byHash[name]
return item, ok
},
) {
t.Fatal("GetHasLookupCatalogName should alias HasLookupCatalogName")
}
svc := NewService(nil)
gotAny, ok := svc.LookupCatalogName(
@ -559,6 +587,34 @@ func TestLookupCatalogNamePreservesDottedLabels(t *testing.T) {
if !ok || gotStr != "hash" {
t.Fatalf("svc.GetLookupCatalogName should alias svc.LookupCatalogName, got %v ok=%v", gotAny, ok)
}
if !svc.HasLookupCatalogName(
"foo.bar",
func(name string) (any, bool) {
item, ok := byLabel[name]
return any(item), ok
},
func(name primitives.Hash) (any, bool) {
item, ok := byHash[name]
return any(item), ok
},
) {
t.Fatal("svc.HasLookupCatalogName should report a dotted raw label match")
}
if !svc.GetHasLookupCatalogName(
"FOO.BAR.LTHN",
func(name string) (any, bool) {
item, ok := byLabel[name]
return any(item), ok
},
func(name primitives.Hash) (any, bool) {
item, ok := byHash[name]
return any(item), ok
},
) {
t.Fatal("svc.GetHasLookupCatalogName should alias svc.HasLookupCatalogName")
}
}
func TestLookupCatalogNameNilCallbacks(t *testing.T) {
@ -570,6 +626,14 @@ func TestLookupCatalogNameNilCallbacks(t *testing.T) {
t.Fatalf("GetLookupCatalogName with nil callbacks = (%q, %v), want (\"\", false)", got, ok)
}
if ok := HasLookupCatalogName[string]("foo", nil, nil); ok {
t.Fatal("HasLookupCatalogName with nil callbacks should return false")
}
if ok := GetHasLookupCatalogName[string]("foo", nil, nil); ok {
t.Fatal("GetHasLookupCatalogName with nil callbacks should return false")
}
svc := NewService(nil)
if got, ok := svc.LookupCatalogName("foo", nil, nil); ok || got != nil {
@ -579,6 +643,14 @@ func TestLookupCatalogNameNilCallbacks(t *testing.T) {
if got, ok := svc.GetLookupCatalogName("foo", nil, nil); ok || got != nil {
t.Fatalf("svc.GetLookupCatalogName with nil callbacks = (%v, %v), want (nil, false)", got, ok)
}
if ok := svc.HasLookupCatalogName("foo", nil, nil); ok {
t.Fatal("svc.HasLookupCatalogName with nil callbacks should return false")
}
if ok := svc.GetHasLookupCatalogName("foo", nil, nil); ok {
t.Fatal("svc.GetHasLookupCatalogName with nil callbacks should return false")
}
}
func TestPackageTypeTables(t *testing.T) {