Documentation

Overview

Package paging implements result set management.

Index

Constants

View Source
const (
	NS = "http://jabber.org/protocol/rsm"
)

Namespaces used by this package.

Variables

This section is empty.

Functions

This section is empty.

Types

type Iter

type Iter struct {
	// contains filtered or unexported fields
}

Iter provides a mechanism for iterating over the children of an XML element. Successive calls to Next will step through each child, returning its start element and a reader that is limited to the remainder of the child.

If the results indicate that there is another page of data, the paging child is skipped and the various paging methods will return queries that can be used to fetch the next and/or previous pages.

func NewIter

func NewIter(r xml.TokenReader, max uint64) *Iter

NewIter returns a new iterator that iterates over the children of the most recent start element already consumed from r.

func WrapIter

func WrapIter(iter *xmlstream.Iter, max uint64) *Iter

WrapIter returns a new iterator that supports paging from an existing xmlstream.Iter.

func (*Iter) Close

func (i *Iter) Close() error

Close indicates that we are finished with the given iterator. Calling it multiple times has no effect.

If the underlying TokenReader is also an io.Closer, Close calls the readers Close method.

func (*Iter) Current

func (i *Iter) Current() (*xml.StartElement, xml.TokenReader)

Current returns a reader over the most recent child.

func (*Iter) CurrentPage

func (i *Iter) CurrentPage() *Set

CurrentPage returns information about the current page.

It is only guaranteed to be set once iteration is finished, or when the iterator is closed without error and may be nil.

func (*Iter) Err

func (i *Iter) Err() error

Err returns the last error encountered by the iterator (if any).

func (*Iter) Next

func (i *Iter) Next() bool

Next returns true if there are more items to decode.

func (*Iter) NextPage

func (i *Iter) NextPage() *RequestNext

NextPage returns a value that can be used to construct a new iterator that queries for the next page.

It is only guaranteed to be set once iteration is finished, or when the iterator is closed without error and may be nil.

func (*Iter) PreviousPage

func (i *Iter) PreviousPage() *RequestPrev

PreviousPage returns a value that can be used to construct a new iterator that queries for the previous page.

It is only guaranteed to be set once iteration is finished, or when the iterator is closed without error and may be nil.

type RequestCount

type RequestCount struct {
	XMLName xml.Name `xml:"http://jabber.org/protocol/rsm set"`
}

RequestCount can be added to a query to request the count of elements without returning any actual items.

func (*RequestCount) MarshalXML

func (req *RequestCount) MarshalXML(e *xml.Encoder, _ xml.StartElement) error

MarshalXML implements xml.Marshaler.

func (*RequestCount) TokenReader

func (req *RequestCount) TokenReader() xml.TokenReader

TokenReader implements xmlstream.Marshaler.

func (*RequestCount) WriteXML

func (req *RequestCount) WriteXML(w xmlstream.TokenWriter) (int, error)

WriteXML implements xmlstream.WriterTo.

type RequestIndex

type RequestIndex struct {
	XMLName xml.Name `xml:"http://jabber.org/protocol/rsm set"`
	Max     uint64   `xml:"max"`
	Index   uint64   `xml:"index"`
}

RequestIndex can be added to a query to skip to a specific page. It is not always supported.

func (*RequestIndex) MarshalXML

func (req *RequestIndex) MarshalXML(e *xml.Encoder, _ xml.StartElement) error

MarshalXML implements xml.Marshaler.

func (*RequestIndex) TokenReader

func (req *RequestIndex) TokenReader() xml.TokenReader

TokenReader implements xmlstream.Marshaler.

func (*RequestIndex) WriteXML

func (req *RequestIndex) WriteXML(w xmlstream.TokenWriter) (int, error)

WriteXML implements xmlstream.WriterTo.

type RequestNext

type RequestNext struct {
	XMLName xml.Name `xml:"http://jabber.org/protocol/rsm set"`
	Max     uint64   `xml:"max,omitempty"`
	After   string   `xml:"after,omitempty"`
}

RequestNext can be added to a query to request the first page or to page forward.

func (*RequestNext) MarshalXML

func (req *RequestNext) MarshalXML(e *xml.Encoder, _ xml.StartElement) error

MarshalXML implements xml.Marshaler.

func (*RequestNext) TokenReader

func (req *RequestNext) TokenReader() xml.TokenReader

TokenReader implements xmlstream.Marshaler.

func (*RequestNext) WriteXML

func (req *RequestNext) WriteXML(w xmlstream.TokenWriter) (int, error)

WriteXML implements xmlstream.WriterTo.

type RequestPrev

type RequestPrev struct {
	XMLName xml.Name `xml:"http://jabber.org/protocol/rsm set"`
	Max     uint64   `xml:"max,omitempty"`
	Before  string   `xml:"before"`
}

RequestPrev can be added to a query to request the last page or to page backward.

func (*RequestPrev) MarshalXML

func (req *RequestPrev) MarshalXML(e *xml.Encoder, _ xml.StartElement) error

MarshalXML implements xml.Marshaler.

func (*RequestPrev) TokenReader

func (req *RequestPrev) TokenReader() xml.TokenReader

TokenReader implements xmlstream.Marshaler.

func (*RequestPrev) WriteXML

func (req *RequestPrev) WriteXML(w xmlstream.TokenWriter) (int, error)

WriteXML implements xmlstream.WriterTo.

type Set

type Set struct {
	XMLName xml.Name `xml:"http://jabber.org/protocol/rsm set"`
	First   struct {
		ID    string  `xml:",cdata"`
		Index *uint64 `xml:"index,omitempty"`
	} `xml:"first"`
	Last  string  `xml:"last"`
	Count *uint64 `xml:"count,omitempty"`
}

Set describes a page from a returned result set.

func (*Set) MarshalXML

func (s *Set) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML satisfies the xml.Marshaler interface.

func (*Set) TokenReader

func (s *Set) TokenReader() xml.TokenReader

TokenReader implements xmlstream.Marshaler.

func (*Set) WriteXML

func (s *Set) WriteXML(w xmlstream.TokenWriter) (int, error)

WriteXML implements xmlstream.WriterTo.

Source Files