# pagination-targets pydantic_v2.BaseModel
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-cursor: a] b''
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-cursor: b] b''
  header cursor ['1', '2', '3']
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-cursor: start] b''
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-cursor: a] b''
  header cursor over the caller's ['1', '2']
  header patch of the cursor pager ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_headers.x-cursor') [field_path=('options', 'extra_headers', 'x-cursor')] invalid_value
  header patch of the cursor page ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_headers.x-cursor') [field_path=('options', 'extra_headers', 'x-cursor')] invalid_value
  query patch of a binding pager ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_query.limit') [field_path=('options', 'extra_query', 'limit')] invalid_value
  query patch of a binding page ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_query.limit') [field_path=('options', 'extra_query', 'limit')] invalid_value
  query patch of the cursor pager ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_query.cursor') [field_path=('options', 'extra_query', 'cursor')] invalid_value
  query patch of the cursor page ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_query.cursor') [field_path=('options', 'extra_query', 'cursor')] invalid_value
  > GET https://api.example.com/users?extra=1
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  page with another query = [1] continuation='a' status=200 attempts=1
  next page with a header patch of the cursor ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_headers.X-Cursor') [field_path=('options', 'extra_headers', 'X-Cursor')] invalid_value
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-cursor: a, x-other: kept] b''
  next page with another header = [2] continuation=None status=200 attempts=1
  > GET https://api.example.com/folders/f1
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/folders/f2
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  path cursor ['1', '2']
  > GET https://api.example.com/folders/f1
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  path cursor '.' [] ! ProtocolDataError: ProtocolDataError(operation_id='listFolder', reason='value') [operation_id='listFolder', location=BodySelector(pointer='/next_cursor')] value
  > GET https://api.example.com/folders/f1
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  path cursor '..' [] ! ProtocolDataError: ProtocolDataError(operation_id='listFolder', reason='value') [operation_id='listFolder', location=BodySelector(pointer='/next_cursor')] value
  > GET https://api.example.com/users?tags=mine
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users?cursor=a&limit=5&code=200&tags=t1&tags=t2
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-snapshot: s1] b''
  > GET https://api.example.com/users?cursor=b&limit=5&code=200&tags=t3
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-snapshot: s1] b''
  bound values ['1', '2', '3']
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  missing first header [] ! ProtocolDataError: ProtocolDataError(operation_id='listUsers', reason='missing') [operation_id='listUsers', location=HeaderSelector(name='x-snapshot', occurrence='single')] missing
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  missing every header [] ! ProtocolDataError: ProtocolDataError(operation_id='listUsers', reason='missing') [operation_id='listUsers', location=HeaderSelector(name='X-Tag', occurrence='all')] missing
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  missing values of the last page ['1']
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  bound page = [1] continuation='a' status=200 attempts=1
  > GET https://api.example.com/users?cursor=a&limit=5&code=200&tags=t1
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-snapshot: s1] b''
  bound next page = [2] continuation='b' status=200 attempts=1
  > GET https://api.example.com/users?cursor=b&limit=5&code=200&tags=t2
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-snapshot: s1] b''
  bound last page = [3] continuation=None status=200 attempts=1
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 13] b'{"query":"a"}'
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 108] b'{"query":"a","after":"1","size":10,"filter":{"states":["open"]},"range":{"from":"a"},"page":{"cursor":"n1"}}'
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 109] b'{"query":"a","after":null,"size":10,"filter":{"states":["open"]},"range":{"from":"a"},"page":{"cursor":"n2"}}'
  body writes ['1', '2', '3']
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 52] b'{"query":"a","page":{"mode":"m"},"range":{"to":"z"}}'
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 128] b'{"query":"a","page":{"mode":"m","cursor":"n1"},"range":{"to":"z","from":"a"},"after":"1","size":10,"filter":{"states":["open"]}}'
  body writes beside members ['1', '2']
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 13] b'{"query":"a"}'
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 112] b'{"query":"a","after":"1","size":10,"filter":{"states":["open"]},"range":{"from":"a"},"page":{"cursor":"longer"}}'
  a long server cursor ['1', '2']
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-cursor: a] b''
  async header cursor ['1', '2']
  > GET https://api.example.com/users
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json] b''
  > GET https://api.example.com/users?cursor=a&limit=5&code=200&tags=t1
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, x-snapshot: s1] b''
  async bound values ['1', '2']
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 13] b'{"query":"a"}'
  async body page = [1] continuation='n1' status=200 attempts=1
  > POST https://api.example.com/searches
    [host: api.example.com, accept-encoding: gzip, deflate, accept: application/json, content-type: application/json, content-length: 108] b'{"query":"a","after":"1","size":10,"filter":{"states":["open"]},"range":{"from":"a"},"page":{"cursor":"n1"}}'
  async body next page = [2] continuation=None status=200 attempts=1
  async header patch of the cursor ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='options.extra_headers.X-Cursor') [field_path=('options', 'extra_headers', 'X-Cursor')] invalid_value
