42 lines
964 B
Go
42 lines
964 B
Go
package render
|
|
|
|
import "fmt"
|
|
|
|
const FormatMarkdown = "markdown"
|
|
|
|
// Options configures rendering behavior across formats.
|
|
type Options struct {
|
|
Title string
|
|
IncludeTimestamps bool
|
|
IncludeSegmentIDs bool
|
|
IncludeMetadata bool
|
|
}
|
|
|
|
// Renderer turns a normalized render model into text output.
|
|
type Renderer interface {
|
|
Render(transcript Transcript, opts Options) (string, error)
|
|
}
|
|
|
|
// Registry resolves renderers by public format name.
|
|
type Registry struct {
|
|
renderers map[string]Renderer
|
|
}
|
|
|
|
// NewRegistry returns a renderer registry with built-in renderers.
|
|
func NewRegistry() Registry {
|
|
return Registry{
|
|
renderers: map[string]Renderer{
|
|
FormatMarkdown: MarkdownRenderer{},
|
|
},
|
|
}
|
|
}
|
|
|
|
// Resolve resolves a renderer by format name.
|
|
func (registry Registry) Resolve(format string) (Renderer, error) {
|
|
renderer, ok := registry.renderers[format]
|
|
if !ok {
|
|
return nil, fmt.Errorf("unsupported --format %q", format)
|
|
}
|
|
return renderer, nil
|
|
}
|