writer.go raw

   1  // Copyright (C) MongoDB, Inc. 2017-present.
   2  //
   3  // Licensed under the Apache License, Version 2.0 (the "License"); you may
   4  // not use this file except in compliance with the License. You may obtain
   5  // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
   6  
   7  package bsonrw
   8  
   9  import (
  10  	"go.mongodb.org/mongo-driver/bson/bsontype"
  11  	"go.mongodb.org/mongo-driver/bson/primitive"
  12  )
  13  
  14  // ArrayWriter is the interface used to create a BSON or BSON adjacent array.
  15  // Callers must ensure they call WriteArrayEnd when they have finished creating
  16  // the array.
  17  type ArrayWriter interface {
  18  	WriteArrayElement() (ValueWriter, error)
  19  	WriteArrayEnd() error
  20  }
  21  
  22  // DocumentWriter is the interface used to create a BSON or BSON adjacent
  23  // document. Callers must ensure they call WriteDocumentEnd when they have
  24  // finished creating the document.
  25  type DocumentWriter interface {
  26  	WriteDocumentElement(string) (ValueWriter, error)
  27  	WriteDocumentEnd() error
  28  }
  29  
  30  // ValueWriter is the interface used to write BSON values. Implementations of
  31  // this interface handle creating BSON or BSON adjacent representations of the
  32  // values.
  33  type ValueWriter interface {
  34  	WriteArray() (ArrayWriter, error)
  35  	WriteBinary(b []byte) error
  36  	WriteBinaryWithSubtype(b []byte, btype byte) error
  37  	WriteBoolean(bool) error
  38  	WriteCodeWithScope(code string) (DocumentWriter, error)
  39  	WriteDBPointer(ns string, oid primitive.ObjectID) error
  40  	WriteDateTime(dt int64) error
  41  	WriteDecimal128(primitive.Decimal128) error
  42  	WriteDouble(float64) error
  43  	WriteInt32(int32) error
  44  	WriteInt64(int64) error
  45  	WriteJavascript(code string) error
  46  	WriteMaxKey() error
  47  	WriteMinKey() error
  48  	WriteNull() error
  49  	WriteObjectID(primitive.ObjectID) error
  50  	WriteRegex(pattern, options string) error
  51  	WriteString(string) error
  52  	WriteDocument() (DocumentWriter, error)
  53  	WriteSymbol(symbol string) error
  54  	WriteTimestamp(t, i uint32) error
  55  	WriteUndefined() error
  56  }
  57  
  58  // ValueWriterFlusher is a superset of ValueWriter that exposes functionality to flush to the underlying buffer.
  59  //
  60  // Deprecated: ValueWriterFlusher will not be supported in Go Driver 2.0.
  61  type ValueWriterFlusher interface {
  62  	ValueWriter
  63  	Flush() error
  64  }
  65  
  66  // BytesWriter is the interface used to write BSON bytes to a ValueWriter.
  67  // This interface is meant to be a superset of ValueWriter, so that types that
  68  // implement ValueWriter may also implement this interface.
  69  //
  70  // Deprecated: BytesWriter will not be supported in Go Driver 2.0.
  71  type BytesWriter interface {
  72  	WriteValueBytes(t bsontype.Type, b []byte) error
  73  }
  74  
  75  // SliceWriter allows a pointer to a slice of bytes to be used as an io.Writer.
  76  //
  77  // Deprecated: SliceWriter will not be supported in Go Driver 2.0.
  78  type SliceWriter []byte
  79  
  80  // Write writes the bytes to the underlying slice.
  81  //
  82  // Deprecated: SliceWriter will not be supported in Go Driver 2.0.
  83  func (sw *SliceWriter) Write(p []byte) (int, error) {
  84  	written := len(p)
  85  	*sw = append(*sw, p...)
  86  	return written, nil
  87  }
  88