//go:build linux || freebsd // +build linux freebsd // Package register provides a single registration point for all built-in goget protocols. // Both CLI (cmd/goget) and library API (pkg/api) call RegisterAll to avoid // duplicating the protocol registration list across packages. package register import ( "codeberg.org/petrbalvin/goget/internal/core" "codeberg.org/petrbalvin/goget/internal/protocol" "codeberg.org/petrbalvin/goget/internal/protocol/dataurl" "codeberg.org/petrbalvin/goget/internal/protocol/file" "codeberg.org/petrbalvin/goget/internal/protocol/ftp" "codeberg.org/petrbalvin/goget/internal/protocol/gemini" "codeberg.org/petrbalvin/goget/internal/protocol/gopher" "codeberg.org/petrbalvin/goget/internal/protocol/http" "codeberg.org/petrbalvin/goget/internal/protocol/sftp" "codeberg.org/petrbalvin/goget/internal/protocol/webdav" ) // RegisterAll registers all built-in protocols on the given registry. // Protocols that are already registered are silently skipped, making this // safe to call from both CLI and API initialization. // Returns the HTTP protocol handler for further configuration (e.g., HSTS). func RegisterAll(r *protocol.Registry) (*http.Client, error) { registerIfMissing := func(p core.Protocol) { if r.Supports(p.Scheme()) { return } _ = r.Register(p) } httpClient, err := http.NewClient(http.DefaultConfig()) if err != nil { return nil, err } registerIfMissing(httpClient) registerIfMissing(ftp.NewProtocol()) registerIfMissing(file.NewProtocol()) registerIfMissing(dataurl.NewProtocol()) registerIfMissing(gopher.NewProtocol()) registerIfMissing(gemini.NewProtocol()) registerIfMissing(sftp.NewProtocol()) registerIfMissing(webdav.NewProtocol()) return httpClient, nil }