@@ -26,7 +26,6 @@ import (
26
26
27
27
"github.com/arduino/arduino-cli/cli/errorcodes"
28
28
"github.com/arduino/arduino-cli/cli/feedback"
29
- "github.com/arduino/arduino-cli/cli/globals"
30
29
"github.com/arduino/arduino-cli/cli/instance"
31
30
"github.com/arduino/arduino-cli/commands/lib"
32
31
rpc "github.com/arduino/arduino-cli/rpc/commands"
@@ -64,63 +63,75 @@ func runSearchCommand(cmd *cobra.Command, args []string) {
64
63
os .Exit (errorcodes .ErrGeneric )
65
64
}
66
65
67
- if globals .OutputFormat == "json" {
68
- if searchFlags .namesOnly {
69
- type LibName struct {
70
- Name string `json:"name,required"`
71
- }
72
-
73
- type NamesOnly struct {
74
- Libraries []LibName `json:"libraries,required"`
75
- }
76
-
77
- names := []LibName {}
78
- results := searchResp .GetLibraries ()
79
- for _ , lsr := range results {
80
- names = append (names , LibName {lsr .Name })
81
- }
82
- feedback .PrintJSON (NamesOnly {
83
- names ,
84
- })
85
- } else {
86
- feedback .PrintJSON (searchResp )
66
+ // get a sorted slice of results
67
+ results := searchResp .GetLibraries ()
68
+ sort .Slice (results , func (i , j int ) bool {
69
+ return results [i ].Name < results [j ].Name
70
+ })
71
+
72
+ feedback .PrintResult (result {
73
+ results : results ,
74
+ namesOnly : searchFlags .namesOnly ,
75
+ })
76
+
77
+ logrus .Info ("Done" )
78
+ }
79
+
80
+ // ouput from this command requires special formatting, let's create a dedicated
81
+ // feedback.Result implementation
82
+ type result struct {
83
+ results []* rpc.SearchedLibrary
84
+ namesOnly bool
85
+ }
86
+
87
+ func (res result ) Data () interface {} {
88
+ if res .namesOnly {
89
+ type LibName struct {
90
+ Name string `json:"name,required"`
91
+ }
92
+
93
+ type NamesOnly struct {
94
+ Libraries []LibName `json:"libraries,required"`
95
+ }
96
+
97
+ names := []LibName {}
98
+ for _ , lsr := range res .results {
99
+ names = append (names , LibName {lsr .Name })
100
+ }
101
+
102
+ return NamesOnly {
103
+ names ,
87
104
}
88
- } else {
89
- // get a sorted slice of results
90
- results := searchResp .GetLibraries ()
91
- sort .Slice (results , func (i , j int ) bool {
92
- return results [i ].Name < results [j ].Name
93
- })
94
-
95
- // print all the things
96
- outputSearchedLibrary (results , searchFlags .namesOnly )
97
105
}
98
106
99
- logrus . Info ( "Done" )
107
+ return res . results
100
108
}
101
109
102
- func outputSearchedLibrary (results []* rpc.SearchedLibrary , namesOnly bool ) {
103
- if len (results ) == 0 {
104
- feedback .Print ("No libraries matching your search." )
105
- return
110
+ func (res result ) String () string {
111
+ if len (res .results ) == 0 {
112
+ return "No libraries matching your search."
106
113
}
107
114
108
- for _ , lsr := range results {
109
- feedback .Printf (`Name: "%s"` , lsr .Name )
110
- if namesOnly {
115
+ var out strings.Builder
116
+
117
+ for _ , lsr := range res .results {
118
+ out .WriteString (fmt .Sprintf ("Name: \" %s\" \n " , lsr .Name ))
119
+ if res .namesOnly {
111
120
continue
112
121
}
113
122
114
- feedback . Printf ( " Author: %s" , lsr .GetLatest ().Author )
115
- feedback . Printf ( " Maintainer: %s" , lsr .GetLatest ().Maintainer )
116
- feedback . Printf ( " Sentence: %s" , lsr .GetLatest ().Sentence )
117
- feedback . Printf ( " Paragraph: %s" , lsr .GetLatest ().Paragraph )
118
- feedback . Printf ( " Website: %s" , lsr .GetLatest ().Website )
119
- feedback . Printf ( " Category: %s" , lsr .GetLatest ().Category )
120
- feedback . Printf ( " Architecture: %s" , strings .Join (lsr .GetLatest ().Architectures , ", " ))
121
- feedback . Printf ( " Types: %s" , strings .Join (lsr .GetLatest ().Types , ", " ))
122
- feedback . Printf ( " Versions: %s" , strings .Replace (fmt .Sprint (versionsFromSearchedLibrary (lsr )), " " , ", " , - 1 ))
123
+ out . WriteString ( fmt . Sprintf ( " Author: %s\n " , lsr .GetLatest ().Author ) )
124
+ out . WriteString ( fmt . Sprintf ( " Maintainer: %s\n " , lsr .GetLatest ().Maintainer ) )
125
+ out . WriteString ( fmt . Sprintf ( " Sentence: %s\n " , lsr .GetLatest ().Sentence ) )
126
+ out . WriteString ( fmt . Sprintf ( " Paragraph: %s\n " , lsr .GetLatest ().Paragraph ) )
127
+ out . WriteString ( fmt . Sprintf ( " Website: %s\n " , lsr .GetLatest ().Website ) )
128
+ out . WriteString ( fmt . Sprintf ( " Category: %s\n " , lsr .GetLatest ().Category ) )
129
+ out . WriteString ( fmt . Sprintf ( " Architecture: %s\n " , strings .Join (lsr .GetLatest ().Architectures , ", " ) ))
130
+ out . WriteString ( fmt . Sprintf ( " Types: %s\n " , strings .Join (lsr .GetLatest ().Types , ", " ) ))
131
+ out . WriteString ( fmt . Sprintf ( " Versions: %s\n " , strings .Replace (fmt .Sprint (versionsFromSearchedLibrary (lsr )), " " , ", " , - 1 ) ))
123
132
}
133
+
134
+ return fmt .Sprintf ("%s" , out .String ())
124
135
}
125
136
126
137
func versionsFromSearchedLibrary (library * rpc.SearchedLibrary ) []* semver.Version {
0 commit comments