mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-12-04 22:36:34 +00:00
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
|
// Copyright (C) MongoDB, Inc. 2017-present.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||
|
// not use this file except in compliance with the License. You may obtain
|
||
|
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
package bsonrw
|
||
|
|
||
|
import (
|
||
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||
|
)
|
||
|
|
||
|
// ArrayWriter is the interface used to create a BSON or BSON adjacent array.
|
||
|
// Callers must ensure they call WriteArrayEnd when they have finished creating
|
||
|
// the array.
|
||
|
type ArrayWriter interface {
|
||
|
WriteArrayElement() (ValueWriter, error)
|
||
|
WriteArrayEnd() error
|
||
|
}
|
||
|
|
||
|
// DocumentWriter is the interface used to create a BSON or BSON adjacent
|
||
|
// document. Callers must ensure they call WriteDocumentEnd when they have
|
||
|
// finished creating the document.
|
||
|
type DocumentWriter interface {
|
||
|
WriteDocumentElement(string) (ValueWriter, error)
|
||
|
WriteDocumentEnd() error
|
||
|
}
|
||
|
|
||
|
// ValueWriter is the interface used to write BSON values. Implementations of
|
||
|
// this interface handle creating BSON or BSON adjacent representations of the
|
||
|
// values.
|
||
|
type ValueWriter interface {
|
||
|
WriteArray() (ArrayWriter, error)
|
||
|
WriteBinary(b []byte) error
|
||
|
WriteBinaryWithSubtype(b []byte, btype byte) error
|
||
|
WriteBoolean(bool) error
|
||
|
WriteCodeWithScope(code string) (DocumentWriter, error)
|
||
|
WriteDBPointer(ns string, oid primitive.ObjectID) error
|
||
|
WriteDateTime(dt int64) error
|
||
|
WriteDecimal128(primitive.Decimal128) error
|
||
|
WriteDouble(float64) error
|
||
|
WriteInt32(int32) error
|
||
|
WriteInt64(int64) error
|
||
|
WriteJavascript(code string) error
|
||
|
WriteMaxKey() error
|
||
|
WriteMinKey() error
|
||
|
WriteNull() error
|
||
|
WriteObjectID(primitive.ObjectID) error
|
||
|
WriteRegex(pattern, options string) error
|
||
|
WriteString(string) error
|
||
|
WriteDocument() (DocumentWriter, error)
|
||
|
WriteSymbol(symbol string) error
|
||
|
WriteTimestamp(t, i uint32) error
|
||
|
WriteUndefined() error
|
||
|
}
|
||
|
|
||
|
// ValueWriterFlusher is a superset of ValueWriter that exposes functionality to flush to the underlying buffer.
|
||
|
type ValueWriterFlusher interface {
|
||
|
ValueWriter
|
||
|
Flush() error
|
||
|
}
|
||
|
|
||
|
// BytesWriter is the interface used to write BSON bytes to a ValueWriter.
|
||
|
// This interface is meant to be a superset of ValueWriter, so that types that
|
||
|
// implement ValueWriter may also implement this interface.
|
||
|
type BytesWriter interface {
|
||
|
WriteValueBytes(t bsontype.Type, b []byte) error
|
||
|
}
|
||
|
|
||
|
// SliceWriter allows a pointer to a slice of bytes to be used as an io.Writer.
|
||
|
type SliceWriter []byte
|
||
|
|
||
|
func (sw *SliceWriter) Write(p []byte) (int, error) {
|
||
|
written := len(p)
|
||
|
*sw = append(*sw, p...)
|
||
|
return written, nil
|
||
|
}
|