package bson_test
import (
"bytes"
"errors"
"fmt"
"io"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/bsonrw"
)
func ExampleEncoder() {
buf := new(bytes.Buffer)
vw, err := bsonrw.NewBSONValueWriter(buf)
if err != nil {
panic(err)
}
encoder, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
type Product struct {
Name string `bson:"name"`
SKU string `bson:"sku"`
Price int64 `bson:"price_cents"`
}
product := Product{
Name: "Cereal Rounds",
SKU: "AB12345",
Price: 399,
}
err = encoder.Encode(product)
if err != nil {
panic(err)
}
fmt.Println(bson.Raw(buf.Bytes()).String())
}
type CityState struct {
City string
State string
}
func (k CityState) String() string {
return fmt.Sprintf("%s, %s", k.City, k.State)
}
func ExampleEncoder_StringifyMapKeysWithFmt() {
buf := new(bytes.Buffer)
vw, err := bsonrw.NewBSONValueWriter(buf)
if err != nil {
panic(err)
}
encoder, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
encoder.StringifyMapKeysWithFmt()
zipCodes := map[CityState][]int{
{City: "New York", State: "NY"}: {10001, 10301, 10451},
}
err = encoder.Encode(zipCodes)
if err != nil {
panic(err)
}
fmt.Println(bson.Raw(buf.Bytes()).String())
}
func ExampleEncoder_UseJSONStructTags() {
buf := new(bytes.Buffer)
vw, err := bsonrw.NewBSONValueWriter(buf)
if err != nil {
panic(err)
}
encoder, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
type Product struct {
Name string `json:"name"`
SKU string `json:"sku"`
Price int64 `json:"price_cents"`
}
encoder.UseJSONStructTags()
product := Product{
Name: "Cereal Rounds",
SKU: "AB12345",
Price: 399,
}
err = encoder.Encode(product)
if err != nil {
panic(err)
}
fmt.Println(bson.Raw(buf.Bytes()).String())
}
func ExampleEncoder_multipleBSONDocuments() {
buf := new(bytes.Buffer)
vw, err := bsonrw.NewBSONValueWriter(buf)
if err != nil {
panic(err)
}
encoder, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
type Coordinate struct {
X int
Y int
}
for i := 0; i < 5; i++ {
err := encoder.Encode(Coordinate{
X: i,
Y: i + 1,
})
if err != nil {
panic(err)
}
}
for {
doc, err := bson.ReadDocument(buf)
if errors.Is(err, io.EOF) {
return
}
if err != nil {
panic(err)
}
fmt.Println(doc.String())
}
}
func ExampleEncoder_extendedJSON() {
buf := new(bytes.Buffer)
vw, err := bsonrw.NewExtJSONValueWriter(buf, true, false)
if err != nil {
panic(err)
}
encoder, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
type Product struct {
Name string `bson:"name"`
SKU string `bson:"sku"`
Price int64 `bson:"price_cents"`
}
product := Product{
Name: "Cereal Rounds",
SKU: "AB12345",
Price: 399,
}
err = encoder.Encode(product)
if err != nil {
panic(err)
}
fmt.Println(buf.String())
}
func ExampleEncoder_multipleExtendedJSONDocuments() {
buf := new(bytes.Buffer)
vw, err := bsonrw.NewExtJSONValueWriter(buf, true, false)
if err != nil {
panic(err)
}
encoder, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
type Coordinate struct {
X int
Y int
}
for i := 0; i < 5; i++ {
err := encoder.Encode(Coordinate{
X: i,
Y: i + 1,
})
if err != nil {
panic(err)
}
}
fmt.Println(buf.String())
}
func ExampleEncoder_IntMinSize() {
type foo struct {
Bar uint32
}
buf := new(bytes.Buffer)
vw, err := bsonrw.NewBSONValueWriter(buf)
if err != nil {
panic(err)
}
enc, err := bson.NewEncoder(vw)
if err != nil {
panic(err)
}
enc.IntMinSize()
err = enc.Encode(foo{2})
if err != nil {
panic(err)
}
fmt.Println(bson.Raw(buf.Bytes()).String())
}