code: func ConvertSystemError(err error) error {
  	innerError := Unwrap(err)
  
  	if os.IsExist(innerError) {
  		return WrapWithMessage(&AlreadyExistsError{Message: innerError.Error()}, innerError.Error())
  	}
  	if os.IsNotExist(innerError) {
  		return WrapWithMessage(&NotFoundError{Message: innerError.Error()}, innerError.Error())
  	}
  	if os.IsPermission(innerError) {
  		return WrapWithMessage(&AccessDeniedError{Message: innerError.Error()}, innerError.Error())
  	}
  	switch realErr := innerError.(type) {
  	case *net.OpError:
  		return WrapWithMessage(&ConnectionProblemError{
  			Message: realErr.Error(),
  			Err:     realErr}, realErr.Error())
  	case *os.PathError:
  		message := fmt.Sprintf("failed to execute command %v error:  %v", realErr.Path, realErr.Err)
  		return WrapWithMessage(&AccessDeniedError{
  			Message: message,
  		}, message)
  	case x509.SystemRootsError, x509.UnknownAuthorityError:
  		return wrapWithDepth(&TrustError{Err: innerError}, 2)
  	}
  	if _, ok := innerError.(net.Error); ok {
  		return WrapWithMessage(&ConnectionProblemError{
  			Message: innerError.Error(),
  			Err:     innerError}, innerError.Error())
  	}
  	return err
  }
docs: // ConvertSystemError converts system error to appropriate trace error
  // if it is possible, otherwise, returns original error