Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
50 changes: 47 additions & 3 deletions snooty.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,54 @@ toc_landing_pages = [
"/libbson/tutorials",
"/libbson/guides",
"/libbson/cross-platform-notes",
"/libbson/api",
"/libbson/api/bson_context_t",
"/libbson/api/bson_decimal128_t",
"/libbson/api/bson_error_t",
"/libbson/api/bson_iter_t",
"/libbson/api/bson_json_reader_t",
"/libbson/api/bson_memory",
"/libbson/api/bson_oid_t",
"/libbson/api/bson_reader_t",
"/libbson/api/bson_string_t",
"/libbson/api/bson_t",
"/libbson/api/bson_value_t",
"/libbson/api/bson_writer_t",
"/libbson/api/character_string_routines",
"/libbson/api/version",
"/libbson/tutorial",
"/libmongoc",
"/libmongoc/api",
"/libmongoc/api/errors",
"/libmongoc/api/init-cleanup",
"/libmongoc/api/mongoc_auto_encryption_opts_t",
"/libmongoc/api/mongoc_bulk_operation_t",
"/libmongoc/api/mongoc_change_stream_t",
"/libmongoc/api/mongoc_client_encryption_t",
"/libmongoc/api/mongoc_client_pool_t",
"/libmongoc/api/mongoc_client_session_t",
"/libmongoc/api/mongoc_client_t",
"/libmongoc/api/mongoc_collection_t",
"/libmongoc/api/mongoc_cursor_t",
"/libmongoc/api/mongoc_database_t",
"/libmongoc/api/mongoc_find_and_modify_opts_t",
"/libmongoc/api/mongoc_gridfs_t",
"/libmongoc/api/mongoc_index_opt_t",
"/libmongoc/api/mongoc_optional_t",
"/libmongoc/api/mongoc_rand",
"/libmongoc/api/mongoc_read_concern_t",
"/libmongoc/api/mongoc_read_prefs_t",
"/libmongoc/api/mongoc_server_api_t",
"/libmongoc/api/mongoc_server_description_t",
"/libmongoc/api/mongoc_session_opt_t",
"/libmongoc/api/mongoc_socket_t",
"/libmongoc/api/mongoc_stream_t",
"/libmongoc/api/mongoc_topology_description_t",
"/libmongoc/api/mongoc_transaction_opt_t",
"/libmongoc/api/mongoc_uri_t",
"/libmongoc/api/mongoc_version",
"/libmongoc/api/mongoc_write_concern_t",
"/libmongoc/application-performance-monitoring",
"/libmongoc/guides",
"/libmongoc/howto",
"/libmongoc/ref",
Expand All @@ -28,6 +74,4 @@ full-version = "{+version+}.2"
is-experimental = "is part of the experimental Queryable Encryption API and may be subject to breaking changes in future releases."
range-is-experimental = "Range algorithm is experimental only and not intended for public use. It is subject to breaking changes."
api-is-experimental = "This API {+is-experimental+}"
opt-is-experimental = "This option {+is-experimental+}"
api-libbson = "https://mongoc.org/libbson/current"
api-libmongoc = "https://mongoc.org/libmongoc/current"
opt-is-experimental = "This option {+is-experimental+}"
2 changes: 1 addition & 1 deletion source/index.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ following our tutorial.

- `MongoDB Developer Center <https://www.mongodb.com/developer/languages/c/>`__

- `API Reference <https://mongoc.org/libmongoc/current/api.html>`_
- :ref:`API Reference <libmongoc-api>`

- `Changelog <https://github.com/mongodb/mongo-c-driver/releases>`__

Expand Down
2 changes: 1 addition & 1 deletion source/libbson.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ libbson
/libbson/tutorials
/libbson/guides
/libbson/cross-platform-notes
API Documentation <https://mongoc.org/libbson/current/api.html>
/libbson/api

Introduction
------------
Expand Down
51 changes: 51 additions & 0 deletions source/libbson/api.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
.. _libbson-api:

=============
API Reference
=============

.. toctree::
:titlesonly:
:maxdepth: 2

/libbson/api/bson_t
/libbson/api/bson_array_builder_t
/libbson/api/bson_context_t
/libbson/api/bson_decimal128_t
/libbson/api/bson_error_t
/libbson/api/bson_iter_t
/libbson/api/bson_json_reader_t
/libbson/api/bson_oid_t
/libbson/api/bson_reader_t
/libbson/api/character_and_string_routines
/libbson/api/bson_string_t
/libbson/api/bson_subtype_t
/libbson/api/bson_type_t
/libbson/api/bson_unichar_t
/libbson/api/bson_value_t
/libbson/api/bson_visitor_t
/libbson/api/bson_writer_t
/libbson/api/bson_get_monotonic_time
/libbson/api/bson_memory
/libbson/api/version

- :ref:`bson_t`
- :ref:`bson_array_builder_t`
- :ref:`bson_context_t`
- :ref:`bson_decimal128_t`
- :ref:`bson_error_t`
- :ref:`bson_iter_t`
- :ref:`bson_json_reader_t`
- :ref:`bson_oid_t`
- :ref:`bson_reader_t`
- :ref:`bson_character_and_string_routines`
- :ref:`bson_string_t`
- :ref:`bson_subtype_t`
- :ref:`bson_type_t`
- :ref:`bson_unichar_t`
- :ref:`bson_value_t`
- :ref:`bson_visitor_t`
- :ref:`bson_writer_t`
- :ref:`bson_get_monotonic_time`
- :ref:`bson_memory`
- :ref:`bson_version`
219 changes: 219 additions & 0 deletions source/libbson/api/bson_array_builder_t.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
.. _bson_array_builder_t:

====================
bson_array_builder_t
====================

.. code-block:: c

typedef struct _bson_array_builder_t bson_array_builder_t;

``bson_array_builder_t`` may be used to build BSON arrays. ``bson_array_builder_t``
internally tracks and uses the array index as a key ("0", "1", "2", ...) when appending
elements.

Appending an Array Value
------------------------

.. code-block:: c

typedef struct _bson_array_builder_t bson_array_builder_t;

bool
bson_append_array_builder_begin (bson_t *bson,
const char *key,
int key_length,
bson_array_builder_t **child);

bool
bson_append_array_builder_end (bson_t *bson, bson_array_builder_t *child);

#define BSON_APPEND_ARRAY_BUILDER_BEGIN(b, key, child) \
bson_append_array_builder_begin (b, key, (int) strlen (key), child)

``bson_append_array_builder_begin`` may be used to append an array as a value. Example:

.. literalinclude:: ../includes/examples/creating.c
:language: c
:start-after: // bson_array_builder_t example ... begin
:end-before: // bson_array_builder_t example ... end
:dedent: 6

Creating a Top-Level Array
--------------------------

.. code-block:: c

bson_array_builder_t * bson_array_builder_new (void);

bool
bson_array_builder_build (bson_array_builder_t *bab, bson_t *out);

BSON_EXPORT (void)
bson_array_builder_destroy (bson_array_builder_t *bab);

``bson_array_builder_new`` and ``bson_array_builder_build`` may be used to build a top-level BSON array.
``bson_array_builder_build`` initializes and moves BSON data to ``out``. The ``bson_array_builder_t`` may
be reused and will start appending a new array at index "0":

Example:

.. literalinclude:: ../includes/examples/creating.c
:language: c
:start-after: // bson_array_builder_t top-level example ... begin
:end-before: // bson_array_builder_t top-level example ... end
:dedent: 6

Appending Values to an Array
----------------------------

``bson_array_builder_append_*`` functions are provided to append values to a BSON array. The
``bson_array_builder_append_*`` functions internally use ``bson_append_*`` and provide the array
index as a key:

.. code-block:: c

bool
bson_array_builder_append_value (bson_array_builder_t *bab,
const bson_value_t *value);


bool
bson_array_builder_append_array (bson_array_builder_t *bab,
const bson_t *array);


bool
bson_array_builder_append_binary (bson_array_builder_t *bab,
bson_subtype_t subtype,
const uint8_t *binary,
uint32_t length);

bool
bson_array_builder_append_bool (bson_array_builder_t *bab, bool value);


bool
bson_array_builder_append_code (bson_array_builder_t *bab,
const char *javascript);


bool
bson_array_builder_append_code_with_scope (bson_array_builder_t *bab,
const char *javascript,
const bson_t *scope);


bool
bson_array_builder_append_dbpointer (bson_array_builder_t *bab,
const char *collection,
const bson_oid_t *oid);


bool
bson_array_builder_append_double (bson_array_builder_t *bab, double value);


bool
bson_array_builder_append_document (bson_array_builder_t *bab,
const bson_t *value);


bool
bson_array_builder_append_document_begin (bson_array_builder_t *bab,
bson_t *child);


bool
bson_array_builder_append_document_end (bson_array_builder_t *bab,
bson_t *child);

bool
bson_array_builder_append_int32 (bson_array_builder_t *bab, int32_t value);


bool
bson_array_builder_append_int64 (bson_array_builder_t *bab, int64_t value);


bool
bson_array_builder_append_decimal128 (bson_array_builder_t *bab,
const bson_decimal128_t *value);


bool
bson_array_builder_append_iter (bson_array_builder_t *bab,
const bson_iter_t *iter);


bool
bson_array_builder_append_minkey (bson_array_builder_t *bab);


bool
bson_array_builder_append_maxkey (bson_array_builder_t *bab);


bool
bson_array_builder_append_null (bson_array_builder_t *bab);


bool
bson_array_builder_append_oid (bson_array_builder_t *bab,
const bson_oid_t *oid);


bool
bson_array_builder_append_regex (bson_array_builder_t *bab,
const char *regex,
const char *options);


bool
bson_array_builder_append_regex_w_len (bson_array_builder_t *bab,
const char *regex,
int regex_length,
const char *options);

bool
bson_array_builder_append_utf8 (bson_array_builder_t *bab,
const char *value,
int length);

bool
bson_array_builder_append_symbol (bson_array_builder_t *bab,
const char *value,
int length);

bool
bson_array_builder_append_time_t (bson_array_builder_t *bab, time_t value);


bool
bson_array_builder_append_timeval (bson_array_builder_t *bab,
struct timeval *value);


bool
bson_array_builder_append_date_time (bson_array_builder_t *bab, int64_t value);


bool
bson_array_builder_append_now_utc (bson_array_builder_t *bab);


bool
bson_array_builder_append_timestamp (bson_array_builder_t *bab,
uint32_t timestamp,
uint32_t increment);

bool
bson_array_builder_append_undefined (bson_array_builder_t *bab);

bool
bson_array_builder_append_array_builder_begin (bson_array_builder_t *bab,
bson_array_builder_t **child);

bool
bson_array_builder_append_array_builder_end (bson_array_builder_t *bab,
bson_array_builder_t *child);
Loading