@@ -192,6 +192,10 @@ func Create(req *rpc.CreateRequest, extraUserAgent ...string) (*rpc.CreateRespon
192
192
}, nil
193
193
}
194
194
195
+ type RPCStatusConverter interface {
196
+ ToRPCStatus () * status.Status
197
+ }
198
+
195
199
// Init loads installed libraries and Platforms in CoreInstance with specified ID,
196
200
// a gRPC status error is returned if the CoreInstance doesn't exist.
197
201
// All responses are sent through responseCallback, can be nil to ignore all responses.
@@ -214,10 +218,11 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
214
218
if responseCallback == nil {
215
219
responseCallback = func (r * rpc.InitResponse ) {}
216
220
}
217
- responseError := func (st * status.Status ) {
221
+
222
+ responseError := func (e RPCStatusConverter ) {
218
223
responseCallback (& rpc.InitResponse {
219
224
Message : & rpc.InitResponse_Error {
220
- Error : st .Proto (),
225
+ Error : e . ToRPCStatus () .Proto (),
221
226
},
222
227
})
223
228
}
@@ -278,17 +283,19 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
278
283
// Load Platforms
279
284
if profile == nil {
280
285
for _ , err := range pmb .LoadHardware () {
281
- s := & arduino.PlatformLoadingError {Cause : err }
282
- responseError (s .ToRPCStatus ())
286
+ responseError (& arduino.InitFailedError {
287
+ Code : codes .Internal ,
288
+ Cause : err ,
289
+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR ,
290
+ })
283
291
}
284
292
} else {
285
293
// Load platforms from profile
286
294
errs := pmb .LoadHardwareForProfile (
287
295
profile , true , downloadCallback , taskCallback ,
288
296
)
289
297
for _ , err := range errs {
290
- s := & arduino.PlatformLoadingError {Cause : err }
291
- responseError (s .ToRPCStatus ())
298
+ responseError (& arduino.PlatformLoadingError {Cause : err })
292
299
}
293
300
294
301
// Load "builtin" tools
@@ -303,35 +310,28 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
303
310
for _ , u := range urls {
304
311
URL , err := utils .URLParse (u )
305
312
if err != nil {
306
- e := & arduino.InitFailedError {
313
+ responseError ( & arduino.InitFailedError {
307
314
Code : codes .InvalidArgument ,
308
315
Cause : fmt .Errorf (tr ("Invalid additional URL: %v" , err )),
309
316
Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INVALID_INDEX_URL ,
310
- }
311
- responseError (e .ToRPCStatus ())
317
+ })
312
318
continue
313
319
}
314
320
321
+ var loadFunc func (* url.URL ) error = pmb .LoadPackageIndex
315
322
if URL .Scheme == "file" {
316
- _ , err := pmb .LoadPackageIndexFromFile (paths .New (URL .Path ))
317
- if err != nil {
318
- e := & arduino.InitFailedError {
319
- Code : codes .FailedPrecondition ,
320
- Cause : fmt .Errorf (tr ("Loading index file: %v" , err )),
321
- Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR ,
322
- }
323
- responseError (e .ToRPCStatus ())
323
+ loadFunc = func (u * url.URL ) error {
324
+ _ , err := pmb .LoadPackageIndexFromFile (paths .New (URL .Path ))
325
+ return err
324
326
}
325
- continue
326
327
}
327
328
328
- if err := pmb . LoadPackageIndex (URL ); err != nil {
329
- e := & arduino.InitFailedError {
329
+ if err := loadFunc (URL ); err != nil {
330
+ responseError ( & arduino.InitFailedError {
330
331
Code : codes .FailedPrecondition ,
331
332
Cause : fmt .Errorf (tr ("Loading index file: %v" , err )),
332
333
Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR ,
333
- }
334
- responseError (e .ToRPCStatus ())
334
+ })
335
335
}
336
336
}
337
337
@@ -343,12 +343,11 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
343
343
for name , tool := range pmb .GetOrCreatePackage ("builtin" ).Tools {
344
344
latest := tool .LatestRelease ()
345
345
if latest == nil {
346
- e := & arduino.InitFailedError {
346
+ responseError ( & arduino.InitFailedError {
347
347
Code : codes .Internal ,
348
348
Cause : fmt .Errorf (tr ("can't find latest release of tool %s" , name )),
349
349
Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR ,
350
- }
351
- responseError (e .ToRPCStatus ())
350
+ })
352
351
} else if ! latest .IsInstalled () {
353
352
builtinToolsToInstall = append (builtinToolsToInstall , latest )
354
353
}
@@ -358,20 +357,22 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
358
357
if len (builtinToolsToInstall ) > 0 {
359
358
for _ , toolRelease := range builtinToolsToInstall {
360
359
if err := installTool (pmb .Build (), toolRelease , downloadCallback , taskCallback ); err != nil {
361
- e := & arduino.InitFailedError {
360
+ responseError ( & arduino.InitFailedError {
362
361
Code : codes .Internal ,
363
362
Cause : err ,
364
363
Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR ,
365
- }
366
- responseError (e .ToRPCStatus ())
364
+ })
367
365
}
368
366
}
369
367
370
368
// We installed at least one builtin tool after loading hardware
371
369
// so we must reload again otherwise we would never found them.
372
370
for _ , err := range loadBuiltinTools () {
373
- s := & arduino.PlatformLoadingError {Cause : err }
374
- responseError (s .ToRPCStatus ())
371
+ responseError (& arduino.InitFailedError {
372
+ Code : codes .Internal ,
373
+ Cause : err ,
374
+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_TOOL_LOAD_ERROR ,
375
+ })
375
376
}
376
377
}
377
378
@@ -382,8 +383,7 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
382
383
defer release ()
383
384
384
385
for _ , err := range pme .LoadDiscoveries () {
385
- s := & arduino.PlatformLoadingError {Cause : err }
386
- responseError (s .ToRPCStatus ())
386
+ responseError (& arduino.PlatformLoadingError {Cause : err })
387
387
}
388
388
389
389
// Create library manager and add libraries directories
@@ -403,8 +403,11 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
403
403
}
404
404
405
405
if err := lm .LoadIndex (); err != nil {
406
- s := status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
407
- responseError (s )
406
+ responseError (& arduino.InitFailedError {
407
+ Code : codes .FailedPrecondition ,
408
+ Cause : fmt .Errorf (tr ("Loading index file: %v" , err )),
409
+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_INDEX_LOAD_ERROR ,
410
+ })
408
411
}
409
412
410
413
if profile == nil {
@@ -431,14 +434,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
431
434
})
432
435
if libRelease == nil {
433
436
taskCallback (& rpc.TaskProgress {Name : tr ("Library %s not found" , libraryRef )})
434
- err := & arduino.LibraryNotFoundError {Library : libraryRef .Library }
435
- responseError (err .ToRPCStatus ())
437
+ responseError (& arduino.LibraryNotFoundError {Library : libraryRef .Library })
436
438
continue
437
439
}
438
440
if err := libRelease .Resource .Download (lm .DownloadsDir , nil , libRelease .String (), downloadCallback , "" ); err != nil {
439
441
taskCallback (& rpc.TaskProgress {Name : tr ("Error downloading library %s" , libraryRef )})
440
- e := & arduino.FailedLibraryInstallError {Cause : err }
441
- responseError (e .ToRPCStatus ())
442
+ responseError (& arduino.FailedLibraryInstallError {Cause : err })
442
443
continue
443
444
}
444
445
taskCallback (& rpc.TaskProgress {Completed : true })
@@ -447,8 +448,7 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
447
448
taskCallback (& rpc.TaskProgress {Name : tr ("Installing library %s" , libraryRef )})
448
449
if err := libRelease .Resource .Install (lm .DownloadsDir , libRoot , libDir ); err != nil {
449
450
taskCallback (& rpc.TaskProgress {Name : tr ("Error installing library %s" , libraryRef )})
450
- e := & arduino.FailedLibraryInstallError {Cause : err }
451
- responseError (e .ToRPCStatus ())
451
+ responseError (& arduino.FailedLibraryInstallError {Cause : err })
452
452
continue
453
453
}
454
454
taskCallback (& rpc.TaskProgress {Completed : true })
@@ -459,8 +459,11 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
459
459
}
460
460
461
461
for _ , err := range lm .RescanLibraries () {
462
- s := status .Newf (codes .FailedPrecondition , tr ("Loading libraries: %v" ), err )
463
- responseError (s )
462
+ responseError (& arduino.InitFailedError {
463
+ Code : codes .FailedPrecondition ,
464
+ Cause : fmt .Errorf (tr ("Loading libraries: %v" ), err ),
465
+ Reason : rpc .FailedInstanceInitReason_FAILED_INSTANCE_INIT_REASON_LIBRARY_LOAD_ERROR ,
466
+ })
464
467
}
465
468
466
469
// Refreshes the locale used, this will change the
0 commit comments