  * If `templateFullPath` is empty `""`, search the template named `prefix-templateShortName`
    in the Application Support directory first, then in the bundled templates,
    and returns the path if found (throws if none is found)
+ * If both or neither are empty, an error will be thrown
 
  - parameter prefix:            the prefix for the template, typically name of one of the SwiftGen subcommand
                                 like `strings`, `colors`, etc
- - parameter templateShortName: the short name of the template, might be `"default"` or any custom name
+ - parameter templateShortName: the short name of the template
  - parameter templateFullPath:  the full path of the template to find. If this is set to an existing file, it
                                 returns that Path without even using `prefix` and `templateShortName` parameters.
 

enum TemplateError: Error, CustomStringConvertible {
  case namedTemplateNotFound(name: String)
  case templatePathNotFound(path: Path)
  case deprecated(option: String, replacement: String)

  var description: String {

      "or use --templatePath to specify a template by its full path."
    case .templatePathNotFound(let path):
      return "Template not found at path \(path.description)."
    case .noTemplateFound:
      return "A template must be chosen either via its name using the '-t' / '--template' option" +
      " or via its path using the '-p' / '--templatePath' option.\n" +
      "There's no 'default' template anymore: you can still access a bundled template but " +
      "you have to explicitly specify its name using '-t'.\n" +
      "To list all the available named templates, you can use the 'swiftgen templates list' command."
    case let .multipleTemplateOptions(path, name):
      return "You need to choose EITHER a named template (--template option) " +
      "OR a template path (option --templatePath). Found name '\(name)' and path '\(path)'"
    case .deprecated(let option, let replacement):
      return "The option '--\(option)' has been deprecated. \(replacement)"
    }
