       }
       self.image = image
     }
+  }
+
+  private func cancelDownload() {
+    guard let token = cancelToken else {
+      return
+    }
+    MapleBacon.shared.cancel(token: token)
   }
 
   private func makeTransformer(displayOptions: [DisplayOptions] = [], imageTransformer: ImageTransforming?) -> ImageTransforming? {

    }
  }

  public func setImage(with url: URL?,
                       placeholder: UIImage? = nil,
                       displayOptions: [DisplayOptions] = [],
                       imageTransformer: ImageTransforming? = nil,
                       completion: (() -> Void)? = nil) {
    baconImageUrl = url
    guard let url = url else {
      return
    }

    if let placeholder = placeholder {
      image = placeholder
    }

    let transformer = makeTransformer(displayOptions: displayOptions, imageTransformer: imageTransformer)

    MapleBacon.shared.image(with: url, imageTransformer: transformer) { [weak self] result in
      defer {
        completion?()
      }

import UIKit

private var baconImageUrlKey: UInt8 = 0
private var cancelTokenKey: UInt8 = 1

extension UIImageView {

