     public enum Error: ErrorProtocol {
         case cantInitFromRawValue
         case noInterchangeData(key: String)
+        case rawIntNotSupported
     }
     
     public init(interchangeData: InterchangeData) {

    }
    
    public func from<T: RawRepresentable>(key: String) throws -> T {
        let rawValue: T.RawValue = try interchangeData.get(key)
        if let value = T(rawValue: rawValue) {
            return value

        throw Error.cantInitFromRawValue
    }
    
    // public func from<T: RawRepresentable where T.RawValue: Convertible>(key: String) throws -> T {
    //     let rawValue: T.RawValue = try unwrap(interchangeData[key].flatMap(T.RawValue.fromCustomInterchangeData))
    //     if let value = T(rawValue: rawValue) {
    //         return value
    //     }
    //     throw Error.cantInitFromRawValue
    // }
    
    public func from<T: Mappable>(key: String) throws -> T {
        if let nestedInterchange = interchangeData[key] {
