1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package parser
- import (
- "fmt"
- "strings"
- "zero/tools/goctl/api/spec"
- )
- const (
- titleTag = "title"
- descTag = "desc"
- versionTag = "version"
- authorTag = "author"
- emailTag = "email"
- )
- type infoState struct {
- *baseState
- innerState int
- }
- func newInfoState(st *baseState) state {
- return &infoState{
- baseState: st,
- innerState: startState,
- }
- }
- func (s *infoState) process(api *spec.ApiSpec) (state, error) {
- attrs, err := s.parseProperties()
- if err != nil {
- return nil, err
- }
- if err := s.writeInfo(api, attrs); err != nil {
- return nil, err
- }
- return newRootState(s.r, s.lineNumber), nil
- }
- func (s *infoState) writeInfo(api *spec.ApiSpec, attrs map[string]string) error {
- for k, v := range attrs {
- switch k {
- case titleTag:
- api.Info.Title = strings.TrimSpace(v)
- case descTag:
- api.Info.Desc = strings.TrimSpace(v)
- case versionTag:
- api.Info.Version = strings.TrimSpace(v)
- case authorTag:
- api.Info.Author = strings.TrimSpace(v)
- case emailTag:
- api.Info.Email = strings.TrimSpace(v)
- default:
- return fmt.Errorf("unknown directive %q in %q section", k, infoDirective)
- }
- }
- return nil
- }
|