# bson_oid_t

BSON ObjectID Abstraction

## Synopsis

    #include <bson/bson.h>

    typedef struct {
       uint8_t bytes[12];
    } bson_oid_t;

## Description

The bson_oid_t structure contains the 12-byte ObjectId notation defined by the BSON ObjectID specification.

ObjectId is a 12-byte BSON type, constructed using:

- a 4-byte value representing the seconds since the Unix epoch (in Big Endian).

- a 5-byte random value.

- a 3-byte counter (Big Endian), starting with a random value.

## String Conversion

You can convert an Object ID to a string using bson_oid_to_string() and back with bson_oid_init_from_string().

## Hashing

A bson_oid_t can be used in hashtables using the function bson_oid_hash() and bson_oid_equal().

## Comparing

A bson_oid_t can be compared to another using bson_oid_compare() for `qsort()` style comparing and bson_oid_equal() for direct equality.

## Validating

You can validate that a string containing a hex-encoded ObjectID is valid using the function bson_oid_is_valid().

## Functions

- bson_oid_compare()
- bson_oid_copy()
- bson_oid_equal()
- bson_oid_get_time_t()
- bson_oid_hash()
- bson_oid_init()
- bson_oid_init_from_data()
- bson_oid_init_from_string()
- bson_oid_init_sequence()
- bson_oid_is_valid()
- bson_oid_to_string()

## Example

    #include <bson/bson.h>
    #include <stdio.h>

    int
    main (int argc, char *argv[])
    {
       bson_oid_t oid;
       char str[25];

       bson_oid_init (&oid, NULL);
       bson_oid_to_string (&oid, str);
       printf ("%s\n", str);

       if (bson_oid_is_valid (str, sizeof str)) {
          bson_oid_init_from_string (&oid, str);
       }

       printf ("The UNIX time was: %u\n", (unsigned) bson_oid_get_time_t (&oid));

       return 0;
    }