Skip to content

Commit 1df5cb8

Browse files
authored
Move custom errors to separate package (#1530)
* Moved errors to arduino package * Handled package name change cause of errors move * Renamed some errors
1 parent 37cd9ef commit 1df5cb8

34 files changed

+249
-216
lines changed

Diff for: commands/errors.go renamed to arduino/errors.go

+14-11
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,19 @@
1313
// Arduino software without disclosing the source code of your own applications.
1414
// To purchase a commercial license, send an email to [email protected].
1515

16-
package commands
16+
package arduino
1717

1818
import (
1919
"fmt"
2020

21+
"github.com/arduino/arduino-cli/i18n"
2122
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2223
"google.golang.org/grpc/codes"
2324
"google.golang.org/grpc/status"
2425
)
2526

27+
var tr = i18n.Tr
28+
2629
func composeErrorMsg(msg string, cause error) string {
2730
if cause == nil {
2831
return msg
@@ -282,41 +285,41 @@ func (e *MissingPlatformPropertyError) ToRPCStatus() *status.Status {
282285
return status.New(codes.FailedPrecondition, e.Error())
283286
}
284287

285-
// PlatformNotFound is returned when a platform is not found
286-
type PlatformNotFound struct {
288+
// PlatformNotFoundError is returned when a platform is not found
289+
type PlatformNotFoundError struct {
287290
Platform string
288291
Cause error
289292
}
290293

291-
func (e *PlatformNotFound) Error() string {
294+
func (e *PlatformNotFoundError) Error() string {
292295
return composeErrorMsg(tr("Platform '%s' not found", e.Platform), e.Cause)
293296
}
294297

295298
// ToRPCStatus converts the error into a *status.Status
296-
func (e *PlatformNotFound) ToRPCStatus() *status.Status {
299+
func (e *PlatformNotFoundError) ToRPCStatus() *status.Status {
297300
return status.New(codes.FailedPrecondition, e.Error())
298301
}
299302

300-
func (e *PlatformNotFound) Unwrap() error {
303+
func (e *PlatformNotFoundError) Unwrap() error {
301304
return e.Cause
302305
}
303306

304-
// LibraryNotFound is returned when a platform is not found
305-
type LibraryNotFound struct {
307+
// LibraryNotFoundError is returned when a platform is not found
308+
type LibraryNotFoundError struct {
306309
Library string
307310
Cause error
308311
}
309312

310-
func (e *LibraryNotFound) Error() string {
313+
func (e *LibraryNotFoundError) Error() string {
311314
return composeErrorMsg(tr("Library '%s' not found", e.Library), e.Cause)
312315
}
313316

314317
// ToRPCStatus converts the error into a *status.Status
315-
func (e *LibraryNotFound) ToRPCStatus() *status.Status {
318+
func (e *LibraryNotFoundError) ToRPCStatus() *status.Status {
316319
return status.New(codes.FailedPrecondition, e.Error())
317320
}
318321

319-
func (e *LibraryNotFound) Unwrap() error {
322+
func (e *LibraryNotFoundError) Unwrap() error {
320323
return e.Cause
321324
}
322325

Diff for: cli/core/upgrade.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import (
2121
"fmt"
2222
"os"
2323

24+
"github.com/arduino/arduino-cli/arduino"
2425
"github.com/arduino/arduino-cli/cli/arguments"
2526
"github.com/arduino/arduino-cli/cli/errorcodes"
2627
"github.com/arduino/arduino-cli/cli/feedback"
2728
"github.com/arduino/arduino-cli/cli/instance"
2829
"github.com/arduino/arduino-cli/cli/output"
29-
"github.com/arduino/arduino-cli/commands"
3030
"github.com/arduino/arduino-cli/commands/core"
3131
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3232
"github.com/sirupsen/logrus"
@@ -97,7 +97,7 @@ func runUpgradeCommand(cmd *cobra.Command, args []string) {
9797
}
9898

9999
if _, err := core.PlatformUpgrade(context.Background(), r, output.ProgressBar(), output.TaskProgress()); err != nil {
100-
if errors.Is(err, &commands.PlatformAlreadyAtTheLatestVersionError{}) {
100+
if errors.Is(err, &arduino.PlatformAlreadyAtTheLatestVersionError{}) {
101101
feedback.Print(err.Error())
102102
continue
103103
}

Diff for: commands/board/attach.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"strings"
2323
"time"
2424

25+
"github.com/arduino/arduino-cli/arduino"
2526
"github.com/arduino/arduino-cli/arduino/cores"
2627
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2728
"github.com/arduino/arduino-cli/arduino/sketch"
@@ -38,15 +39,15 @@ var tr = i18n.Tr
3839
func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.TaskProgressCB) (*rpc.BoardAttachResponse, error) {
3940
pm := commands.GetPackageManager(req.GetInstance().GetId())
4041
if pm == nil {
41-
return nil, &commands.InvalidInstanceError{}
42+
return nil, &arduino.InvalidInstanceError{}
4243
}
4344
var sketchPath *paths.Path
4445
if req.GetSketchPath() != "" {
4546
sketchPath = paths.New(req.GetSketchPath())
4647
}
4748
sk, err := sketch.New(sketchPath)
4849
if err != nil {
49-
return nil, &commands.CantOpenSketchError{Cause: err}
50+
return nil, &arduino.CantOpenSketchError{Cause: err}
5051
}
5152

5253
boardURI := req.GetBoardUri()
@@ -62,7 +63,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
6263
} else {
6364
deviceURI, err := url.Parse(boardURI)
6465
if err != nil {
65-
return nil, &commands.InvalidArgumentError{Message: tr("Invalid Device URL format"), Cause: err}
66+
return nil, &arduino.InvalidArgumentError{Message: tr("Invalid Device URL format"), Cause: err}
6667
}
6768

6869
var findBoardFunc func(*packagemanager.PackageManager, *discovery.Monitor, *url.URL) *cores.Board
@@ -72,7 +73,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
7273
case "http", "https", "tcp", "udp":
7374
findBoardFunc = findNetworkConnectedBoard
7475
default:
75-
return nil, &commands.InvalidArgumentError{Message: tr("Invalid device port type provided")}
76+
return nil, &arduino.InvalidArgumentError{Message: tr("Invalid device port type provided")}
7677
}
7778

7879
duration, err := time.ParseDuration(req.GetSearchTimeout())
@@ -88,7 +89,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
8889
// TODO: Handle the case when no board is found.
8990
board := findBoardFunc(pm, monitor, deviceURI)
9091
if board == nil {
91-
return nil, &commands.InvalidArgumentError{Message: tr("No supported board found at %s", deviceURI)}
92+
return nil, &arduino.InvalidArgumentError{Message: tr("No supported board found at %s", deviceURI)}
9293
}
9394
taskCB(&rpc.TaskProgress{Name: tr("Board found: %s", board.Name())})
9495

@@ -103,7 +104,7 @@ func Attach(ctx context.Context, req *rpc.BoardAttachRequest, taskCB commands.Ta
103104

104105
err = sk.ExportMetadata()
105106
if err != nil {
106-
return nil, &commands.PermissionDeniedError{Message: tr("Cannot export sketch metadata"), Cause: err}
107+
return nil, &arduino.PermissionDeniedError{Message: tr("Cannot export sketch metadata"), Cause: err}
107108
}
108109
taskCB(&rpc.TaskProgress{Name: tr("Selected fqbn: %s", sk.Metadata.CPU.Fqbn), Completed: true})
109110
return &rpc.BoardAttachResponse{}, nil

Diff for: commands/board/details.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package board
1818
import (
1919
"context"
2020

21+
"github.com/arduino/arduino-cli/arduino"
2122
"github.com/arduino/arduino-cli/arduino/cores"
2223
"github.com/arduino/arduino-cli/commands"
2324
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -28,17 +29,17 @@ import (
2829
func Details(ctx context.Context, req *rpc.BoardDetailsRequest) (*rpc.BoardDetailsResponse, error) {
2930
pm := commands.GetPackageManager(req.GetInstance().GetId())
3031
if pm == nil {
31-
return nil, &commands.InvalidInstanceError{}
32+
return nil, &arduino.InvalidInstanceError{}
3233
}
3334

3435
fqbn, err := cores.ParseFQBN(req.GetFqbn())
3536
if err != nil {
36-
return nil, &commands.InvalidFQBNError{Cause: err}
37+
return nil, &arduino.InvalidFQBNError{Cause: err}
3738
}
3839

3940
boardPackage, boardPlatform, board, boardProperties, boardRefPlatform, err := pm.ResolveFQBN(fqbn)
4041
if err != nil {
41-
return nil, &commands.UnknownFQBNError{Cause: err}
42+
return nil, &arduino.UnknownFQBNError{Cause: err}
4243
}
4344

4445
details := &rpc.BoardDetailsResponse{}

Diff for: commands/board/list.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"strings"
2626
"time"
2727

28+
"github.com/arduino/arduino-cli/arduino"
2829
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2930
"github.com/arduino/arduino-cli/arduino/discovery"
3031
"github.com/arduino/arduino-cli/commands"
@@ -143,7 +144,7 @@ func identify(pm *packagemanager.PackageManager, port *discovery.Port) ([]*rpc.B
143144
logrus.Debug("Board not recognized")
144145
} else if err != nil {
145146
// this is bad, bail out
146-
return nil, &commands.UnavailableError{Message: tr("Error getting board info from Arduino Cloud")}
147+
return nil, &arduino.UnavailableError{Message: tr("Error getting board info from Arduino Cloud")}
147148
}
148149

149150
// add a DetectedPort entry in any case: the `Boards` field will
@@ -188,15 +189,15 @@ func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, e error) {
188189

189190
pm := commands.GetPackageManager(req.GetInstance().Id)
190191
if pm == nil {
191-
return nil, &commands.InvalidInstanceError{}
192+
return nil, &arduino.InvalidInstanceError{}
192193
}
193194

194195
dm := pm.DiscoveryManager()
195196
if errs := dm.RunAll(); len(errs) > 0 {
196-
return nil, &commands.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
197+
return nil, &arduino.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
197198
}
198199
if errs := dm.StartAll(); len(errs) > 0 {
199-
return nil, &commands.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
200+
return nil, &arduino.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", errs)}
200201
}
201202
defer func() {
202203
if errs := dm.StopAll(); len(errs) > 0 {
@@ -208,7 +209,7 @@ func List(req *rpc.BoardListRequest) (r []*rpc.DetectedPort, e error) {
208209
retVal := []*rpc.DetectedPort{}
209210
ports, errs := pm.DiscoveryManager().List()
210211
if len(errs) > 0 {
211-
return nil, &commands.UnavailableError{Message: tr("Error getting board list"), Cause: fmt.Errorf("%v", errs)}
212+
return nil, &arduino.UnavailableError{Message: tr("Error getting board list"), Cause: fmt.Errorf("%v", errs)}
212213
}
213214
for _, port := range ports {
214215
boards, err := identify(pm, port)
@@ -237,7 +238,7 @@ func Watch(instanceID int32, interrupt <-chan bool) (<-chan *rpc.BoardListWatchR
237238
runErrs := dm.RunAll()
238239
if len(runErrs) == len(dm.IDs()) {
239240
// All discoveries failed to run, we can't do anything
240-
return nil, &commands.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", runErrs)}
241+
return nil, &arduino.UnavailableError{Message: tr("Error starting board discoveries"), Cause: fmt.Errorf("%v", runErrs)}
241242
}
242243

243244
eventsChan, errs := dm.StartSyncAll()

Diff for: commands/board/listall.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"context"
2020
"strings"
2121

22+
"github.com/arduino/arduino-cli/arduino"
2223
"github.com/arduino/arduino-cli/arduino/utils"
2324
"github.com/arduino/arduino-cli/commands"
2425
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -28,7 +29,7 @@ import (
2829
func ListAll(ctx context.Context, req *rpc.BoardListAllRequest) (*rpc.BoardListAllResponse, error) {
2930
pm := commands.GetPackageManager(req.GetInstance().GetId())
3031
if pm == nil {
31-
return nil, &commands.InvalidInstanceError{}
32+
return nil, &arduino.InvalidInstanceError{}
3233
}
3334

3435
searchArgs := strings.Join(req.GetSearchArgs(), " ")

Diff for: commands/board/search.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"sort"
2121
"strings"
2222

23+
"github.com/arduino/arduino-cli/arduino"
2324
"github.com/arduino/arduino-cli/arduino/utils"
2425
"github.com/arduino/arduino-cli/commands"
2526
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -32,7 +33,7 @@ import (
3233
func Search(ctx context.Context, req *rpc.BoardSearchRequest) (*rpc.BoardSearchResponse, error) {
3334
pm := commands.GetPackageManager(req.GetInstance().GetId())
3435
if pm == nil {
35-
return nil, &commands.InvalidInstanceError{}
36+
return nil, &arduino.InvalidInstanceError{}
3637
}
3738

3839
res := &rpc.BoardSearchResponse{Boards: []*rpc.BoardListItem{}}

Diff for: commands/bundled_tools.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package commands
1717

1818
import (
19+
"github.com/arduino/arduino-cli/arduino"
1920
"github.com/arduino/arduino-cli/arduino/cores"
2021
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2122
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
@@ -49,7 +50,7 @@ func InstallToolRelease(pm *packagemanager.PackageManager, toolRelease *cores.To
4950
err := pm.InstallTool(toolRelease)
5051
if err != nil {
5152
log.WithError(err).Warn("Cannot install tool")
52-
return &FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err}
53+
return &arduino.FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err}
5354
}
5455
log.Info("Tool installed")
5556
taskCB(&rpc.TaskProgress{Message: tr("%s installed", toolRelease), Completed: true})

0 commit comments

Comments
 (0)