64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package promptdef
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io/fs"
|
|
"os"
|
|
|
|
"gitea.maximumdirect.net/eric/promptkit/internal/filecatalog"
|
|
)
|
|
|
|
type promptDefinitionSource interface {
|
|
contentSourceRoot
|
|
findYAMLFiles(context.Context) ([]string, error)
|
|
readDefinition(string) ([]byte, error)
|
|
displayPath(string) string
|
|
}
|
|
|
|
type osPromptSource struct {
|
|
root string
|
|
contentRoot osContentSourceRoot
|
|
}
|
|
|
|
func (s osPromptSource) findYAMLFiles(ctx context.Context) ([]string, error) {
|
|
return filecatalog.FindYAMLFiles(ctx, s.root)
|
|
}
|
|
|
|
func (s osPromptSource) readDefinition(name string) ([]byte, error) {
|
|
return os.ReadFile(name)
|
|
}
|
|
|
|
func (s osPromptSource) displayPath(name string) string {
|
|
return filecatalog.RelativePath(s.root, name)
|
|
}
|
|
|
|
func (s osPromptSource) readContentFile(sourcePath string, contentFile string) (string, string, error) {
|
|
return s.contentRoot.readContentFile(sourcePath, contentFile)
|
|
}
|
|
|
|
type fsPromptSource struct {
|
|
fsys fs.FS
|
|
root string
|
|
contentRoot contentSourceRoot
|
|
}
|
|
|
|
func (s fsPromptSource) findYAMLFiles(ctx context.Context) ([]string, error) {
|
|
if s.fsys == nil {
|
|
return nil, errors.New("filesystem is nil")
|
|
}
|
|
return filecatalog.FindFSYAMLFiles(ctx, s.fsys, s.root)
|
|
}
|
|
|
|
func (s fsPromptSource) readDefinition(name string) ([]byte, error) {
|
|
return fs.ReadFile(s.fsys, name)
|
|
}
|
|
|
|
func (s fsPromptSource) displayPath(name string) string {
|
|
return filecatalog.DisplayPath(s.root, name)
|
|
}
|
|
|
|
func (s fsPromptSource) readContentFile(sourcePath string, contentFile string) (string, string, error) {
|
|
return s.contentRoot.readContentFile(sourcePath, contentFile)
|
|
}
|