You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.5 KiB
78 lines
2.5 KiB
// 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 |
|
}
|
|
|