// Copyright (C) 2022 Marius Schellenberger package parse import ( "cachefs/pkg/provider" "cachefs/pkg/provider/crypto" "cachefs/pkg/provider/os" "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, key []byte) (provider.FS, error) { u, err := neturl.Parse(url) if err != nil { return nil, err } if !filepath.IsAbs(u.Path) { return nil, ErrPathNotAbsolute } var fs provider.FS switch u.Scheme { case "file": fs, err = os.NewFS(u.Path) case "sftp": fs, err = sftp.NewFS(u, klogr.New().WithName("sftp")) default: return nil, fmt.Errorf("%w: %s", ErrUnsupportedScheme, u.Scheme) } if err != nil { return nil, err } if key != nil { fs, err = crypto.NewFS(fs, key) } return fs, err }