package spec import ( "errors" "strings" "github.com/tal-tech/go-zero/core/stringx" "github.com/tal-tech/go-zero/tools/goctl/util" ) const bodyTagKey = "json" var definedKeys = []string{"json", "form", "path"} func (s Service) Routes() []Route { var result []Route for _, group := range s.Groups { result = append(result, group.Routes...) } return result } func (m Member) Tags() []*Tag { tags, err := Parse(m.Tag) if err != nil { panic(m.Tag + ", " + err.Error()) } return tags.Tags() } func (m Member) IsOptional() bool { if !m.IsBodyMember() { return false } tag := m.Tags() for _, item := range tag { if item.Key == bodyTagKey { if stringx.Contains(item.Options, "optional") { return true } } } return false } func (m Member) IsOmitempty() bool { if !m.IsBodyMember() { return false } tag := m.Tags() for _, item := range tag { if item.Key == bodyTagKey { if stringx.Contains(item.Options, "omitempty") { return true } } } return false } func (m Member) GetPropertyName() (string, error) { tags := m.Tags() if len(tags) == 0 { return "", errors.New("json property name not exist, member: " + m.Name) } for _, tag := range tags { if stringx.Contains(definedKeys, tag.Key) { if tag.Name == "-" { return util.Untitle(m.Name), nil } return tag.Name, nil } } return "", errors.New("json property name not exist, member: " + m.Name) } func (m Member) GetComment() string { return strings.TrimSpace(strings.Join(m.Comments, "; ")) } func (m Member) IsBodyMember() bool { if m.IsInline { return true } tags := m.Tags() for _, tag := range tags { if tag.Key == bodyTagKey { return true } } return false } func (t Type) GetBodyMembers() []Member { var result []Member for _, member := range t.Members { if member.IsBodyMember() { result = append(result, member) } } return result } func (t Type) GetNonBodyMembers() []Member { var result []Member for _, member := range t.Members { if !member.IsBodyMember() { result = append(result, member) } } return result }