 
 // MARK: - Protocol
 
-/// Type can be converted to and from JSON.
-public protocol JSONConvertible {
+/// Type can be converted to JSON.
+public protocol JSONEncodable {
+    
+    /// Encodes the reciever into JSON.
+    func toJSON() -> JSON.Value
+}
+
+/// Type can be converted from JSON.
+public protocol JSONDecodable {
     
     /// Decodes the reciever from JSON.
     init?(JSONValue: JSON.Value)
-    
-    /// Encodes the reciever into JSON.
-    func toJSON() -> JSON.Value
+}
+
+/// Type can be converted from JSON according to parameters.
+public protocol JSONParametrizedDecodable {
+    
+    typealias JSONDecodingParameters
+    
+    /// Decodes the reciever from JSON according to the specified parameters.
+    init?(JSONValue: JSON.Value, parameters: JSONDecodingParameters)
 }
 
 // Typealiases due to compiler error

        /// JSON value a JSON object
        case Object(JSONObject)
        
        // MARK: RawRepresentable
        
        public var rawValue: Any {


public typealias DoubleValue = Double

public typealias NullValue = Null

