github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/api/export_repo.go (about) 1 package api 2 3 import ( 4 "reflect" 5 ) 6 7 func (repo *Repository) ExportData(fields []string) map[string]interface{} { 8 v := reflect.ValueOf(repo).Elem() 9 data := map[string]interface{}{} 10 11 for _, f := range fields { 12 switch f { 13 case "parent": 14 data[f] = miniRepoExport(repo.Parent) 15 case "templateRepository": 16 data[f] = miniRepoExport(repo.TemplateRepository) 17 case "languages": 18 data[f] = repo.Languages.Edges 19 case "labels": 20 data[f] = repo.Labels.Nodes 21 case "assignableUsers": 22 data[f] = repo.AssignableUsers.Nodes 23 case "mentionableUsers": 24 data[f] = repo.MentionableUsers.Nodes 25 case "milestones": 26 data[f] = repo.Milestones.Nodes 27 case "projects": 28 data[f] = repo.Projects.Nodes 29 case "repositoryTopics": 30 var topics []RepositoryTopic 31 for _, n := range repo.RepositoryTopics.Nodes { 32 topics = append(topics, n.Topic) 33 } 34 data[f] = topics 35 default: 36 sf := fieldByName(v, f) 37 data[f] = sf.Interface() 38 } 39 } 40 41 return data 42 } 43 44 func miniRepoExport(r *Repository) map[string]interface{} { 45 if r == nil { 46 return nil 47 } 48 return map[string]interface{}{ 49 "id": r.ID, 50 "name": r.Name, 51 "owner": r.Owner, 52 } 53 }