         case Success(productId: String)
         case Error(error: ErrorType)
     }
+    public enum RetrieveResultType {
+        case Success(product: SKProduct)
+        case Error(error: ErrorType)
+    }
     public enum RestoreResultType {
         case Success(productId: String)
         case Error(error: ErrorType)

            }
            return
        }
        purchase(product: product, completion: completion)
    }
    
    public func restorePurchases(completion: (result: RestoreResultType) -> ()) {

    }
    
    // MARK: Public methods
    public func retrieveProductInfo(productId: String, completion: (result: RetrieveResultType) -> ()) {
        guard let product = store.products[productId] else {
            
            requestProduct(productId) { (inner: () throws -> SKProduct) -> () in
                do {
                    let product = try inner()
                    completion(result: .Success(product: product))
                }
                catch let error {
                    completion(result: .Error(error: error))
