74 lines
2.2 KiB
Go
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()
|
|
}
|