Files
soft_quay/core/catalog/client.go
T

49 lines
1.1 KiB
Go
Raw Normal View History

2026-07-16 16:52:46 +08:00
package catalog
import "context"
// Client composes signed loading, protocol validation and target filtering.
type Client struct {
loader *Loader
parser Parser
target Target
}
// NewClient creates the formal Catalog loading path. Protocol validation is
// installed on Loader so invalid remote data cannot replace the usable cache.
func NewClient(
verifier Verifier,
fetcher Fetcher,
cache Cache,
target Target,
) *Client {
parser := Parser{ExpectedChannel: target.Channel}
return &Client{
loader: NewLoader(verifier, fetcher, cache, parser),
parser: parser,
target: target,
}
}
// Load returns a verified, validated and target-filtered Catalog.
func (client *Client) Load(ctx context.Context) (Catalog, error) {
result, err := client.loader.Load(ctx)
if err != nil {
return Catalog{}, err
}
manifest, err := client.parser.Parse(result.Document)
if err != nil {
return Catalog{}, err
}
entries, err := Filter(manifest, client.target)
if err != nil {
return Catalog{}, err
}
return Catalog{
Manifest: manifest,
Entries: entries,
Source: result.Source,
Warning: result.Warning,
}, nil
}