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) }