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  }