@@ -303,23 +303,35 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
303303		for  _ , u  :=  range  urls  {
304304			URL , err  :=  utils .URLParse (u )
305305			if  err  !=  nil  {
306- 				s  :=  status .Newf (codes .InvalidArgument , tr ("Invalid additional URL: %v" ), err )
307- 				responseError (s )
306+ 				e  :=  & arduino.ErrorInitFailed {
307+ 					Code :   codes .InvalidArgument ,
308+ 					Cause :  fmt .Errorf (tr ("Invalid additional URL: %v" , err )),
309+ 					Reason : arduino .InvalidIndexURL ,
310+ 				}
311+ 				responseError (e .ToRPCStatus ())
308312				continue 
309313			}
310314
311315			if  URL .Scheme  ==  "file"  {
312316				_ , err  :=  pmb .LoadPackageIndexFromFile (paths .New (URL .Path ))
313317				if  err  !=  nil  {
314- 					s  :=  status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
315- 					responseError (s )
318+ 					e  :=  & arduino.ErrorInitFailed {
319+ 						Code :   codes .FailedPrecondition ,
320+ 						Cause :  fmt .Errorf (tr ("Loading index file: %v" , err )),
321+ 						Reason : arduino .ErrorIndexLoad ,
322+ 					}
323+ 					responseError (e .ToRPCStatus ())
316324				}
317325				continue 
318326			}
319327
320328			if  err  :=  pmb .LoadPackageIndex (URL ); err  !=  nil  {
321- 				s  :=  status .Newf (codes .FailedPrecondition , tr ("Loading index file: %v" ), err )
322- 				responseError (s )
329+ 				e  :=  & arduino.ErrorInitFailed {
330+ 					Code :   codes .FailedPrecondition ,
331+ 					Cause :  fmt .Errorf (tr ("Loading index file: %v" , err )),
332+ 					Reason : arduino .ErrorIndexLoad ,
333+ 				}
334+ 				responseError (e .ToRPCStatus ())
323335			}
324336		}
325337
@@ -331,8 +343,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
331343		for  name , tool  :=  range  pmb .GetOrCreatePackage ("builtin" ).Tools  {
332344			latest  :=  tool .LatestRelease ()
333345			if  latest  ==  nil  {
334- 				s  :=  status .Newf (codes .Internal , tr ("can't find latest release of tool %s" , name ))
335- 				responseError (s )
346+ 				e  :=  & arduino.ErrorInitFailed {
347+ 					Code :   codes .Internal ,
348+ 					Cause :  fmt .Errorf (tr ("can't find latest release of tool %s" , name )),
349+ 					Reason : arduino .ErrorToolLoad ,
350+ 				}
351+ 				responseError (e .ToRPCStatus ())
336352			} else  if  ! latest .IsInstalled () {
337353				builtinToolsToInstall  =  append (builtinToolsToInstall , latest )
338354			}
@@ -342,8 +358,12 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) erro
342358		if  len (builtinToolsToInstall ) >  0  {
343359			for  _ , toolRelease  :=  range  builtinToolsToInstall  {
344360				if  err  :=  installTool (pmb .Build (), toolRelease , downloadCallback , taskCallback ); err  !=  nil  {
345- 					s  :=  status .Newf (codes .Internal , err .Error ())
346- 					responseError (s )
361+ 					e  :=  & arduino.ErrorInitFailed {
362+ 						Code :   codes .Internal ,
363+ 						Cause :  err ,
364+ 						Reason : arduino .ErrorToolLoad ,
365+ 					}
366+ 					responseError (e .ToRPCStatus ())
347367				}
348368			}
349369
0 commit comments