Посмотрите в сторону Generic. Вроде бы это то что вам надо.
updated
Ага, я понял... пробуйте такое
func GetTools(currentURLRequest: String, completion:(Result<ToolDetailsSearchResult, Error>)->Void
...
fetch(urlRequest: currentURLRequest) { (_ result: Result<ToolDetailsSearchResult, Error>) in
...
}
}
Смысл проблемы в том, что вы не указывали итоговый тип переменной. Надо явно указать тип при использовании, тогда он понимает во что транслировать.