anchor.diff:          member this.DeleteAsync() = client.DeleteSubmissionAsync(submission.submission_id)
   
   type InkbunnySourceWrapper(client: InkbunnyClient, batchSize: int) =
  -    inherit SourceWrapper<int>()
  -
  -    let mutable rid: string option = None
  -    let mutable firstSubmission: InkbunnySubmissionDetail option = None
  +    inherit AsyncSeqWrapper()
   
       let initialFetch maxCount =
           let searchParams = new InkbunnySearchParameters()
  
positive.code:     let furtherFetch rid page maxCount =
          client.SearchAsync(rid, page, maxCount |> Nullable) |> Async.AwaitTask
  
      let inkbunnyFetch cursor = async {
          let maxCount = batchSize |> min 100
          let! response =
              match cursor with
              | None -> initialFetch maxCount
              | Some c ->
                  match rid with
                  | None -> initialFetch maxCount
                  | Some r -> furtherFetch r (c + 1) maxCount
  
          rid <- Some response.rid
          
          let! details = client.GetSubmissionsAsync(response.submissions |> Seq.map (fun s -> s.submission_id), show_description_bbcode_parsed=true) |> Async.AwaitTask
          
          firstSubmission <- details.submissions |> Seq.tryHead
  
          return {
              Posts = details.submissions
                  |> Seq.filter (fun s -> s.``public``.value)
                  |> Seq.sortByDescending (fun s -> s.create_datetime)
                  |> Seq.map (fun s -> new InkbunnyPostWrapper(s, client))
                  |> Seq.cast
              Next = response.page + 1
              HasMore = response.pages_count >= (cursor |> Option.defaultValue 1)
          }
      }
  
      let getFirstSubmission = async {
          match firstSubmission with
          | Some s -> return s
          | None ->
              do! inkbunnyFetch None |> Swu.whenDone ignore
              match firstSubmission with
              | Some s -> return s
              | None -> return failwith "Cannot get Inkbunny icon if no submissions are present"
      }
  
      override this.Name = "Inkbunny"
      override this.SuggestedBatchSize = batchSize
  
      override this.Fetch cursor take = inkbunnyFetch cursor
  
      override this.Whoami = async {
          let! s = getFirstSubmission
          return s.username
      }
  
      override this.GetUserIcon size = async {
          let! s = getFirstSubmission
          return s.user_icon_url_small
      }
negative.code: 
  open InkbunnyLib
  open System
  open FSharp.Control
  
  type InkbunnyPostWrapper(submission: InkbunnySubmissionDetail, client: InkbunnyClient) =
      interface IRemotePhotoPost with
  