bson/raw_array.go
2025-03-17 20:58:26 +01:00

74 lines
2.2 KiB
Go

// Copyright (C) MongoDB, Inc. 2024-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 bson
import (
"io"
"gitea.psichedelico.com/go/bson/x/bsonx/bsoncore"
)
// RawArray is a raw bytes representation of a BSON array.
type RawArray []byte
// ReadArray reads a BSON array from the io.Reader and returns it as a
// bson.RawArray.
func ReadArray(r io.Reader) (RawArray, error) {
doc, err := bsoncore.NewArrayFromReader(r)
return RawArray(doc), err
}
// Index searches for and retrieves the value at the given index. This method
// will panic if the array is invalid or if the index is out of bounds.
func (a RawArray) Index(index uint) RawValue {
return convertFromCoreValue(bsoncore.Array(a).Index(index))
}
// IndexErr searches for and retrieves the value at the given index.
func (a RawArray) IndexErr(index uint) (RawValue, error) {
elem, err := bsoncore.Array(a).IndexErr(index)
return convertFromCoreValue(elem), err
}
// DebugString outputs a human readable version of Array. It will attempt to
// stringify the valid components of the array even if the entire array is not
// valid.
func (a RawArray) DebugString() string {
return bsoncore.Array(a).DebugString()
}
// String outputs an ExtendedJSON version of Array. If the Array is not valid,
// this method returns an empty string.
func (a RawArray) String() string {
return bsoncore.Array(a).String()
}
// Values returns this array as a slice of values. The returned slice will
// contain valid values. If the array is not valid, the values up to the invalid
// point will be returned along with an error.
func (a RawArray) Values() ([]RawValue, error) {
vals, err := bsoncore.Array(a).Values()
if err != nil {
return nil, err
}
rvals := make([]RawValue, 0, len(vals))
for _, val := range vals {
rvals = append(rvals, convertFromCoreValue(val))
}
return rvals, err
}
// Validate validates the array and ensures the elements contained within are
// valid.
func (a RawArray) Validate() error {
return bsoncore.Array(a).Validate()
}