     // MARK: - Unboxing required values (by key)
     
     /// Unbox a required value by key
-    public func unbox<T: UnboxCompatibleType>(key: String) throws -> T {
+    public func unbox<T: UnboxCompatible>(key: String) throws -> T {
         return try self.unbox(path: .key(key), transform: T.unbox)
     }
     

    // MARK: - Unboxing optional values (by key path)
    
    /// Unbox an optional value by key path
    public func unbox<T: UnboxCompatibleType>(keyPath: String) -> T? {
        return try? self.unbox(keyPath: keyPath)
    }
    

}

/// Protocol used to enable any type as being unboxable, by transforming a raw value
public protocol UnboxableByTransform: UnboxCompatible {
    /// The type of raw value that this type can be transformed from. Must be a valid JSON type.
    associatedtype UnboxRawValue
    
