     }
 }
 
+/// Controls stub responses are returned.
 public enum StubBehavior {
+
+    /// Never return  a response.
     case never
+
+    /// Return a response immediately.
     case immediate
+
+    /// Return a response after a delay.
     case delayed(seconds: TimeInterval)
 }
 
+/// Represents a type of upload task.
 public enum UploadType {
+
+    /// Upload a file.
     case file(URL)
+
+    /// Upload "multipart/form-data"
     case multipart([MultipartFormData])
 }
 
+/// Represents a type of download task.
 public enum DownloadType {
+
+    /// Download a file to a destination.
     case request(DownloadDestination)
 }
 
+/// Represents an HTTP task.
 public enum Task {
+
+    /// A basic request task.
     case request
+
+    /// An upload task.
     case upload(UploadType)
+
+    /// A download task.
     case download(DownloadType)
 }
 
+/// Represents "multipart/form-data" for an upload.
 public struct MultipartFormData {
+
+    /// Method to provide the form data.
     public enum FormDataProvider {
         case data(Foundation.Data)
         case file(URL)
         case stream(InputStream, UInt64)
     }
 
+    /// Initialize a new `MultipartFormData`.
     public init(provider: FormDataProvider, name: String, fileName: String? = nil, mimeType: String? = nil) {
         self.provider = provider
         self.name = name

import Foundation
import Alamofire

/// Protocol to define the base URL, path, method, parameters and sample data for a target.
public protocol TargetType {
    var baseURL: URL { get }
    var path: String { get }
    var method: Moya.Method { get }
    var parameters: [String: Any]? { get }
    var parameterEncoding: ParameterEncoding { get } // Defaults to `URLEncoding`
    var sampleData: Data { get }
    var task: Task { get }
    var validate: Bool { get } // Alamofire validation (defaults to `false`)
}

public extension TargetType {

        self.mimeType = mimeType
    }

    /// The method being used for providing form data.
    public let provider: FormDataProvider

    /// The name.
    public let name: String

    /// The file name.
    public let fileName: String?

    /// The MIME type
    public let mimeType: String?
}
