func (b *Backend) handleRootHelp() (*logical.Response, error) { // Build a mapping of the paths and get the paths alphabetized to // make the output prettier. pathsMap := make(map[string]*Path) paths := make([]string, 0, len(b.Paths)) for i, p := range b.pathsRe { paths = append(paths, p.String()) pathsMap[p.String()] = b.Paths[i] } sort.Strings(paths) // Build the path data pathData := make([]rootHelpTemplatePath, 0, len(paths)) for _, route := range paths { p := pathsMap[route] pathData = append(pathData, rootHelpTemplatePath{ Path: route, Help: strings.TrimSpace(p.HelpSynopsis), }) } help, err := executeTemplate(rootHelpTemplate, &rootHelpTemplateData{ Help: strings.TrimSpace(b.Help), Paths: pathData, }) if err != nil { return nil, err } return logical.HelpResponse(help, nil), nil }
func (p *Path) helpCallback( req *logical.Request, data *FieldData) (*logical.Response, error) { var tplData pathTemplateData tplData.Request = req.Path tplData.RoutePattern = p.Pattern tplData.Synopsis = strings.TrimSpace(p.HelpSynopsis) if tplData.Synopsis == "" { tplData.Synopsis = "<no synopsis>" } tplData.Description = strings.TrimSpace(p.HelpDescription) if tplData.Description == "" { tplData.Description = "<no description>" } // Alphabetize the fields fieldKeys := make([]string, 0, len(p.Fields)) for k, _ := range p.Fields { fieldKeys = append(fieldKeys, k) } sort.Strings(fieldKeys) // Build the field help tplData.Fields = make([]pathTemplateFieldData, len(fieldKeys)) for i, k := range fieldKeys { schema := p.Fields[k] description := strings.TrimSpace(schema.Description) if description == "" { description = "<no description>" } tplData.Fields[i] = pathTemplateFieldData{ Key: k, Type: schema.Type.String(), Description: description, } } help, err := executeTemplate(pathHelpTemplate, &tplData) if err != nil { return nil, fmt.Errorf("error executing template: %s", err) } return logical.HelpResponse(help, nil), nil }