MCPcopy Index your code
hub / github.com/rilldata/rill / parseComponentYAML

Method parseComponentYAML

runtime/parser/parse_component.go:83–172  ·  view source on GitHub ↗

parseComponentYAML parses and validates a ComponentYAML. It is separated from parseComponent to allow inline creation of components from a canvas YAML file.

(tmp *ComponentYAML)

Source from the content-addressed store, hash-verified

81// parseComponentYAML parses and validates a ComponentYAML.
82// It is separated from parseComponent to allow inline creation of components from a canvas YAML file.
83func (p *Parser) parseComponentYAML(tmp *ComponentYAML) (*runtimev1.ComponentSpec, []ResourceName, error) {
84 // Display name backwards compatibility
85 if tmp.Title != "" && tmp.DisplayName == "" {
86 tmp.DisplayName = tmp.Title
87 }
88
89 // Description backwards compatibility
90 if tmp.Subtitle != "" && tmp.Description == "" {
91 tmp.Description = tmp.Subtitle
92 }
93
94 // Discover and validate the renderer
95 n := 0
96 var renderer string
97 var rendererProps *structpb.Struct
98 if len(tmp.Other) == 1 {
99 n++
100 var props map[string]any
101 for renderer, props = range tmp.Other {
102 break
103 }
104
105 propsPB, err := structpb.NewStruct(props)
106 if err != nil {
107 return nil, nil, fmt.Errorf(`failed to convert property %q to struct: %w`, renderer, err)
108 }
109
110 rendererProps = propsPB
111 } else {
112 n += len(tmp.Other)
113 }
114
115 // Check there is exactly one renderer
116 if n == 0 {
117 return nil, nil, errors.New(`missing renderer configuration`)
118 }
119 if n > 1 {
120 return nil, nil, errors.New(`multiple renderers are not allowed`)
121 }
122
123 // We generally treat the renderer props as untyped, but since "metrics_view" is a very common field,
124 // and adding it to refs generally makes for nicer error messages, we specifically search for and link it here.
125 var refs []ResourceName
126 if rendererProps != nil {
127 for k, v := range rendererProps.Fields {
128 if k == "metrics_view" {
129 name := v.GetStringValue()
130 if name != "" {
131 refs = append(refs, ResourceName{Kind: ResourceKindMetricsView, Name: name})
132 }
133 break
134 }
135 }
136 }
137
138 // Parse input variables
139 var input []*runtimev1.ComponentVariable
140 if len(tmp.Input) > 0 {

Callers 2

parseComponentMethod · 0.95

Calls 2

ErrorfMethod · 0.65
ProtoMethod · 0.45

Tested by

no test coverage detected