LiteCore
Couchbase Lite cross-platform core implementation
|
An FLEncoder generates encoded Fleece or JSON data. More...
Setup and configuration | |
enum | FLEncoderFormat { kFLEncodeFleece , kFLEncodeJSON , kFLEncodeJSON5 } |
Output formats a FLEncoder can generate. More... | |
NODISCARD FLEECE_PUBLIC FLEncoder | FLEncoder_New (void) |
Creates a new encoder, for generating Fleece data. | |
NODISCARD FLEECE_PUBLIC FLEncoder | FLEncoder_NewWithOptions (FLEncoderFormat format, size_t reserveSize, bool uniqueStrings) |
Creates a new encoder, allowing some options to be customized. | |
NODISCARD FLEECE_PUBLIC FLEncoder | FLEncoder_NewWritingToFile (FILE *, bool uniqueStrings) |
Creates a new Fleece encoder that writes to a file, not to memory. | |
FLEECE_PUBLIC void | FLEncoder_Free (FLEncoder FL_NULLABLE) |
Frees the space used by an encoder. | |
FLEECE_PUBLIC void | FLEncoder_SetSharedKeys (FLEncoder, FLSharedKeys FL_NULLABLE) |
Tells the encoder to use a shared-keys mapping when encoding dictionary keys. | |
FLEECE_PUBLIC void | FLEncoder_SetExtraInfo (FLEncoder, void *FL_NULLABLE info) |
Associates an arbitrary user-defined value with the encoder. | |
FLEECE_PUBLIC void * | FLEncoder_GetExtraInfo (FLEncoder) |
Returns the user-defined value associated with the encoder; NULL by default. | |
FLEECE_PUBLIC void | FLEncoder_Reset (FLEncoder) |
Resets the state of an encoder without freeing it. | |
FLEECE_PUBLIC size_t | FLEncoder_BytesWritten (FLEncoder) |
Returns the number of bytes encoded so far. | |
Writing to the encoder | |
After an error occurs, the encoder will ignore all subsequent writes. | |
FLEECE_PUBLIC bool | FLEncoder_WriteNull (FLEncoder) |
Writes a null value to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteUndefined (FLEncoder) |
Writes an undefined value to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteBool (FLEncoder, bool) |
Writes a boolean value (true or false) to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteInt (FLEncoder, int64_t) |
Writes an integer to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteUInt (FLEncoder, uint64_t) |
Writes an unsigned integer to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteFloat (FLEncoder, float) |
Writes a 32-bit floating point number to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteDouble (FLEncoder, double) |
Writes a 64-bit floating point number to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteString (FLEncoder, FLString) |
Writes a string to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteDateString (FLEncoder encoder, FLTimestamp ts, bool asUTC) |
Writes a timestamp to an encoder, as an ISO-8601 date string. | |
FLEECE_PUBLIC bool | FLEncoder_WriteData (FLEncoder, FLSlice) |
Writes a binary data value (a blob) to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteValue (FLEncoder, FLValue) |
Writes a Fleece Value to an Encoder. | |
FLEECE_PUBLIC bool | FLEncoder_BeginArray (FLEncoder, size_t reserveCount) |
Begins writing an array value to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_EndArray (FLEncoder) |
Ends writing an array value; pops back the previous encoding state. | |
FLEECE_PUBLIC bool | FLEncoder_BeginDict (FLEncoder, size_t reserveCount) |
Begins writing a dictionary value to an encoder. | |
FLEECE_PUBLIC bool | FLEncoder_WriteKey (FLEncoder, FLString) |
Specifies the key for the next value to be written to the current dictionary. | |
FLEECE_PUBLIC bool | FLEncoder_WriteKeyValue (FLEncoder, FLValue) |
Specifies the key for the next value to be written to the current dictionary. | |
FLEECE_PUBLIC bool | FLEncoder_EndDict (FLEncoder) |
Ends writing a dictionary value; pops back the previous encoding state. | |
FLEECE_PUBLIC bool | FLEncoder_WriteRaw (FLEncoder, FLSlice) |
Writes raw data directly to the encoded output. | |
Finishing up | |
NODISCARD FLEECE_PUBLIC FLDoc FL_NULLABLE | FLEncoder_FinishDoc (FLEncoder, FLError *FL_NULLABLE outError) |
Ends encoding; if there has been no error, it returns the encoded Fleece data packaged in an FLDoc. | |
NODISCARD FLEECE_PUBLIC FLSliceResult | FLEncoder_Finish (FLEncoder, FLError *FL_NULLABLE outError) |
Ends encoding; if there has been no error, it returns the encoded data, else null. | |
Error handling | |
FLEECE_PUBLIC FLError | FLEncoder_GetError (FLEncoder) |
Returns the error code of an encoder, or NoError (0) if there's no error. | |
FLEECE_PUBLIC const char *FL_NULLABLE | FLEncoder_GetErrorMessage (FLEncoder) |
Returns the error message of an encoder, or NULL if there's no error. | |
An FLEncoder generates encoded Fleece or JSON data.
It's sort of a structured output stream, with nesting. There are functions for writing every type of scalar value, and for beginning and ending collections. To write a collection you begin it, write its values, then end it. (Of course a value in a collection can itself be another collection.) When writing a dictionary, you have to call writeKey before writing each value.
enum FLEncoderFormat |
Output formats a FLEncoder can generate.
Enumerator | |
---|---|
kFLEncodeFleece | Fleece encoding. |
kFLEncodeJSON | JSON encoding. |
kFLEncodeJSON5 | JSON5, an extension of JSON with a more readable syntax |
FLEECE_PUBLIC bool FLEncoder_BeginArray | ( | FLEncoder | , |
size_t | reserveCount ) |
Begins writing an array value to an encoder.
This pushes a new state where each subsequent value written becomes an array item, until FLEncoder_EndArray is called.
reserveCount | Number of array elements to reserve space for. If you know the size of the array, providing it here speeds up encoding slightly. If you don't know, just use zero. |
FLEECE_PUBLIC bool FLEncoder_BeginDict | ( | FLEncoder | , |
size_t | reserveCount ) |
Begins writing a dictionary value to an encoder.
This pushes a new state where each subsequent key and value written are added to the dictionary, until FLEncoder_EndDict is called. Before adding each value, you must call FLEncoder_WriteKey (not FLEncoder_WriteString!), to write the dictionary key.
reserveCount | Number of dictionary items to reserve space for. If you know the size of the dictionary, providing it here speeds up encoding slightly. If you don't know, just use zero. |
FLEECE_PUBLIC size_t FLEncoder_BytesWritten | ( | FLEncoder | ) |
Returns the number of bytes encoded so far.
FLEECE_PUBLIC bool FLEncoder_EndArray | ( | FLEncoder | ) |
Ends writing an array value; pops back the previous encoding state.
FLEECE_PUBLIC bool FLEncoder_EndDict | ( | FLEncoder | ) |
Ends writing a dictionary value; pops back the previous encoding state.
NODISCARD FLEECE_PUBLIC FLSliceResult FLEncoder_Finish | ( | FLEncoder | , |
FLError *FL_NULLABLE | outError ) |
Ends encoding; if there has been no error, it returns the encoded data, else null.
This does not free the FLEncoder; call FLEncoder_Free (or FLEncoder_Reset) next.
NODISCARD FLEECE_PUBLIC FLDoc FL_NULLABLE FLEncoder_FinishDoc | ( | FLEncoder | , |
FLError *FL_NULLABLE | outError ) |
Ends encoding; if there has been no error, it returns the encoded Fleece data packaged in an FLDoc.
(This function does not support JSON encoding.) This does not free the FLEncoder; call FLEncoder_Free (or FLEncoder_Reset) next.
FLEECE_PUBLIC void FLEncoder_Free | ( | FLEncoder | FL_NULLABLE | ) |
Frees the space used by an encoder.
FLEECE_PUBLIC FLError FLEncoder_GetError | ( | FLEncoder | ) |
Returns the error code of an encoder, or NoError (0) if there's no error.
FLEECE_PUBLIC const char *FL_NULLABLE FLEncoder_GetErrorMessage | ( | FLEncoder | ) |
Returns the error message of an encoder, or NULL if there's no error.
FLEECE_PUBLIC void * FLEncoder_GetExtraInfo | ( | FLEncoder | ) |
Returns the user-defined value associated with the encoder; NULL by default.
NODISCARD FLEECE_PUBLIC FLEncoder FLEncoder_New | ( | void | ) |
Creates a new encoder, for generating Fleece data.
Call FLEncoder_Free when done.
NODISCARD FLEECE_PUBLIC FLEncoder FLEncoder_NewWithOptions | ( | FLEncoderFormat | format, |
size_t | reserveSize, | ||
bool | uniqueStrings ) |
Creates a new encoder, allowing some options to be customized.
format | The output format to generate (Fleece, JSON, or JSON5.) |
reserveSize | The number of bytes to preallocate for the output. (Default is 256) |
uniqueStrings | (Fleece only) If true, string values that appear multiple times will be written as a single shared value. This saves space but makes encoding slightly slower. You should only turn this off if you know you're going to be writing large numbers of non-repeated strings. (Default is true) |
NODISCARD FLEECE_PUBLIC FLEncoder FLEncoder_NewWritingToFile | ( | FILE * | , |
bool | uniqueStrings ) |
Creates a new Fleece encoder that writes to a file, not to memory.
FLEECE_PUBLIC void FLEncoder_Reset | ( | FLEncoder | ) |
Resets the state of an encoder without freeing it.
It can then be reused to encode another value.
FLEECE_PUBLIC void FLEncoder_SetExtraInfo | ( | FLEncoder | , |
void *FL_NULLABLE | info ) |
Associates an arbitrary user-defined value with the encoder.
FLEECE_PUBLIC void FLEncoder_SetSharedKeys | ( | FLEncoder | , |
FLSharedKeys | FL_NULLABLE ) |
Tells the encoder to use a shared-keys mapping when encoding dictionary keys.
FLEECE_PUBLIC bool FLEncoder_WriteBool | ( | FLEncoder | , |
bool | ) |
Writes a boolean value (true or false) to an encoder.
FLEECE_PUBLIC bool FLEncoder_WriteData | ( | FLEncoder | , |
FLSlice | ) |
Writes a binary data value (a blob) to an encoder.
This can contain absolutely anything including null bytes. If the encoder is generating JSON, the blob will be written as a base64-encoded string.
FLEECE_PUBLIC bool FLEncoder_WriteDateString | ( | FLEncoder | encoder, |
FLTimestamp | ts, | ||
bool | asUTC ) |
Writes a timestamp to an encoder, as an ISO-8601 date string.
encoder | The encoder to write to. |
ts | The timestamp (milliseconds since Unix epoch 1-1-1970). |
asUTC | If true, date is written in UTC (GMT); if false, with the local timezone. |
FLEECE_PUBLIC bool FLEncoder_WriteDouble | ( | FLEncoder | , |
double | ) |
Writes a 64-bit floating point number to an encoder.
FLEECE_PUBLIC bool FLEncoder_WriteFloat | ( | FLEncoder | , |
float | ) |
Writes a 32-bit floating point number to an encoder.
FLEECE_PUBLIC bool FLEncoder_WriteInt | ( | FLEncoder | , |
int64_t | ) |
Writes an integer to an encoder.
The parameter is typed as int64_t
but you can pass any integral type (signed or unsigned) except for huge uint64_t
s. The number will be written in a compact form that uses only as many bytes as necessary.
FLEECE_PUBLIC bool FLEncoder_WriteKey | ( | FLEncoder | , |
FLString | ) |
Specifies the key for the next value to be written to the current dictionary.
FLEECE_PUBLIC bool FLEncoder_WriteKeyValue | ( | FLEncoder | , |
FLValue | ) |
Specifies the key for the next value to be written to the current dictionary.
The key is given as a Value, which must be a string or integer.
FLEECE_PUBLIC bool FLEncoder_WriteNull | ( | FLEncoder | ) |
Writes a null
value to an encoder.
(This is an explicitly-stored null, like the JSON null
, not the "undefined" value represented by a NULL FLValue pointer.)
FLEECE_PUBLIC bool FLEncoder_WriteRaw | ( | FLEncoder | , |
FLSlice | ) |
Writes raw data directly to the encoded output.
(This is not the same as FLEncoder_WriteData, which safely encodes a blob.)
FLEECE_PUBLIC bool FLEncoder_WriteString | ( | FLEncoder | , |
FLString | ) |
Writes a string to an encoder.
The string must be UTF-8-encoded and must not contain any zero bytes.
FLEECE_PUBLIC bool FLEncoder_WriteUInt | ( | FLEncoder | , |
uint64_t | ) |
Writes an unsigned integer to an encoder.
FLEECE_PUBLIC bool FLEncoder_WriteUndefined | ( | FLEncoder | ) |
Writes an undefined
value to an encoder.
(Its value when read will not be a NULL
pointer, but it can be recognized by FLValue_GetType
returning kFLUndefined
.)
FLEECE_PUBLIC bool FLEncoder_WriteValue | ( | FLEncoder | , |
FLValue | ) |
Writes a Fleece Value to an Encoder.