| 162 | } |
| 163 | |
| 164 | func (ir *InterMediateRepresentation) Render(out io.Writer) error { |
| 165 | templatesFS := ir.plugin.GetTemplates() |
| 166 | // ReadDir to get list of embedded templates |
| 167 | entries, err := fs.ReadDir(templatesFS, "templates") |
| 168 | if err != nil { |
| 169 | return fmt.Errorf("failed to read templates directory: %w", err) |
| 170 | } |
| 171 | |
| 172 | var filenames []string |
| 173 | |
| 174 | for _, entry := range entries { |
| 175 | if !entry.IsDir() { |
| 176 | filenames = append(filenames, "templates/"+entry.Name()) |
| 177 | } |
| 178 | } |
| 179 | |
| 180 | funcs := template.FuncMap{ |
| 181 | "title": format.Title, |
| 182 | "join": strings.Join, |
| 183 | "example": templateFnExample, |
| 184 | "pattern": templateFnPattern, |
| 185 | "format": templateFnFormat, |
| 186 | } |
| 187 | maps.Copy(funcs, ir.plugin.GetFuncMap()) |
| 188 | |
| 189 | tmpl, err := template.New("").Funcs(funcs).ParseFS(templatesFS, filenames...) |
| 190 | if err != nil { |
| 191 | return fmt.Errorf("failed to parse interface template: %w", err) |
| 192 | } |
| 193 | |
| 194 | if err := tmpl.ExecuteTemplate(out, "main.tmpl", ir); err != nil { |
| 195 | return fmt.Errorf("failed to execute template: %w", err) |
| 196 | } |
| 197 | |
| 198 | return nil |
| 199 | } |
| 200 | |
| 201 | type getSchemaer interface { |
| 202 | Schema() *base.SchemaProxy |