Documentation
¶
Overview ¶
Package renderer defines renderer interfaces used to format analyzed proposals.
Implementing a Renderer ¶
A renderer must implement:
- ID() string: unique renderer identifier.
- RenderTo(io.Writer, RenderRequest, analyzer.AnalyzedProposal) error
Example custom plain-text renderer:
import (
"fmt"
"io"
"github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalanalysis"
"github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalanalysis/analyzer"
"github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalanalysis/renderer"
)
type PlainRenderer struct{}
func (PlainRenderer) ID() string {
return "plain"
}
func (PlainRenderer) RenderTo(
w io.Writer,
req renderer.RenderRequest,
proposal analyzer.AnalyzedProposal,
) error {
if _, err := fmt.Fprintf(
w,
"domain=%s env=%s batches=%d\n",
req.Domain,
req.EnvironmentName,
len(proposal.BatchOperations()),
); err != nil {
return err
}
for _, batch := range proposal.BatchOperations() {
if _, err := fmt.Fprintf(
w,
"- chain=%d calls=%d\n",
batch.ChainSelector(),
len(batch.Calls()),
); err != nil {
return err
}
}
return nil
}
Registering with the engine ¶
eng := proposalanalysis.NewAnalyzerEngine()
if err := eng.RegisterRenderer(PlainRenderer{}); err != nil {
return err
}
To render output, call `eng.RenderTo(...)` with the renderer ID and a `renderer.RenderRequest`.
Index ¶
Constants ¶
const IDMarkdown = "markdown"
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Option ¶ added in v0.84.0
type Option func(*config)
Option configures a TemplateRenderer.
func WithTemplateDir ¶ added in v0.84.0
WithTemplateDir loads templates from a filesystem directory instead of the embedded defaults. The directory should contain *.tmpl files whose {{define}} names match the default set: proposal, batchOperation, call, parameter, annotations.
func WithTemplateFuncs ¶ added in v0.84.0
WithTemplateFuncs adds extra template functions to the renderer's func map. These are merged with the built-in functions; caller-provided functions take precedence over built-ins if keys collide.
func WithTemplates ¶ added in v0.84.0
WithTemplates provides in-memory template overrides keyed by any name. Each value must contain a valid {{define "name"}} block -- the key itself is used only as a template set label and does not need to match the define name. Useful for testing or programmatic template generation.
type Registry ¶ added in v0.81.0
type Registry struct {
// contains filtered or unexported fields
}
Registry manages renderer registration and lookup
func NewRegistry ¶ added in v0.81.0
func NewRegistry() *Registry
NewRegistry creates a new renderer registry
type RenderRequest ¶
RenderRequest encapsulates the domain and environment name
type Renderer ¶
type Renderer interface {
ID() string
RenderTo(w io.Writer, req RenderRequest, proposal analyzer.AnalyzedProposal) error
}
Renderer transforms an AnalyzedProposal into a specific output format
type TemplateRenderer ¶ added in v0.84.0
type TemplateRenderer struct {
// contains filtered or unexported fields
}
TemplateRenderer renders an AnalyzedProposal using Go text/template.
func NewMarkdownRenderer ¶ added in v0.84.0
func NewMarkdownRenderer(opts ...Option) (*TemplateRenderer, error)
NewMarkdownRenderer creates a TemplateRenderer with embedded markdown templates.
func (*TemplateRenderer) ID ¶ added in v0.84.0
func (r *TemplateRenderer) ID() string
func (*TemplateRenderer) RenderTo ¶ added in v0.84.0
func (r *TemplateRenderer) RenderTo(w io.Writer, req RenderRequest, proposal analyzer.AnalyzedProposal) error