// Copyright (C) 2022 Marius Schellenberger package parse import ( "cachefs/pkg/provider" "cachefs/pkg/provider/mount" "cachefs/pkg/provider/sftp" "errors" "fmt" neturl "net/url" "path/filepath" "k8s.io/klog/v2/klogr" ) var ( ErrPathNotAbsolute = errors.New("path is not absolute") ErrUnsupportedScheme = errors.New("unsupported scheme") ) func FS(url string) (provider.FS, error) { u, err := neturl.Parse(url) if err != nil { return nil, err } if !filepath.IsAbs(u.Path) { return nil, ErrPathNotAbsolute } switch u.Scheme { case "file": return mount.NewFS(u.Path) case "sftp": return sftp.NewFS(u, klogr.New().WithName("sftp")) } return nil, fmt.Errorf("%w: %s", ErrUnsupportedScheme, u.Scheme) }