C Server-Side SDK
LaunchDarkly SDK
file_data.h File Reference

Public API for file data source. More...

#include <stdio.h>
#include <stdarg.h>
#include <launchdarkly/boolean.h>
#include <launchdarkly/export.h>
#include <launchdarkly/data_source.h>
Include dependency graph for file_data.h:

Go to the source code of this file.

Functions

struct LDDataSourceLDFileDataInit (int fileCount, const char **filenames)
 Creates an LDDataSource which you can use to configure the client with a file data source. More...
 

Detailed Description

Public API for file data source.

Integration between the LaunchDarkly SDK and file data.

The file data source allows you to use local files as a source of feature flag state. This would typically be used in a test environment, to operate using a predetermined feature flag state without an actual LaunchDarkly connection. See LDFileDataInit() for details.

Function Documentation

◆ LDFileDataInit()

struct LDDataSource* LDFileDataInit ( int  fileCount,
const char **  filenames 
)

Creates an LDDataSource which you can use to configure the client with a file data source.

Parameters
[in]fileCountThe number of filename arguments that are going to be passed in.
[in]filenamesThe filenames of the files to load flags from
Returns
a data source configuration object

This allows you to use local files as a source of feature flag state, instead of using an actual LaunchDarkly connection.

This function can be called with fileCount file names and will load them all into the data store.

struct LDClient *client;
struct LDConfig *config = makeMyConfig();
const char *filenames[2] = {"../tests/datafiles/flag-only.json", "../tests/datafiles/flag-with-duplicate-key.json"};
LDConfigSetDataSource(config, LDFileDataInit(2, filenames));
if(!(client = LDClientInit(config, 10))) {
LDConfigFree(config);
return;
}

This will cause the client not to connect to LaunchDarkly to get feature flags. The client may still make network connections to send analytics events, unless you have disabled this with LDConfigSetSendEvents().

Flag data files should be encoded using JSON. They contain an object with three possible properties:

  • flags Feature flag definitions.
  • flagVersions Simplified feature flags that contain only a value.
  • segments User segment definitions.

The format of the data in flags and segments is defined by the LaunchDarkly application and is subject to change. Rather than trying to construct these objects yourself, it is simpler to request existing flags directly from the LaunchDarkly server in JSON format, and use this output as the starting point for your file. In Linux you would do this:

curl -H "Authorization: {your sdk key}" https://app.launchdarkly.com/sdk/latest-all

The output will look something like this (but with many more properties):

{
"flags": {
"flag-key-1": {
"key": "flag-key-1",
"on": true,
"variations": [ "a", "b" ]
},
"flag-key-2": {
"key": "flag-key-2",
"on": true,
"variations": [ "c", "d" ]
}
},
"segments": {
"segment-key-1": {
"key": "segment-key-1",
"includes": [ "user-key-1" ]
}
}
}

Data in this format allows the SDK to exactly duplicate all the kinds of flag behavior supported by LaunchDarkly. However, in many cases you will not need this complexity, but will just want to set specific flag keys to specific values. For that, you can use a much simpler format:

{
"flagValues": {
"my-string-flag-key": "value-1",
"my-boolean-flag-key": true,
"my-integer-flag-key": 3
}
}

It is also possible to specify both flags and flagValues, if you want some flags to have simple values and others to have complex behavior. However, it is an error to use the same flag key or segment key more than once, either in a single file or across multiple files.

If the data source encounters a duplicate key it will ignore it and use the previously loaded flag.

LDConfigFree
void LDConfigFree(struct LDConfig *const config)
Destroy a config not associated with a client instance.
LDFileDataInit
struct LDDataSource * LDFileDataInit(int fileCount, const char **filenames)
Creates an LDDataSource which you can use to configure the client with a file data source.
LDConfig
An opaque config object.
LDConfigSetDataSource
void LDConfigSetDataSource(struct LDConfig *const config, struct LDDataSource *const dataSource)
Sets the implementation of the data source.
LDClient
An opaque client object.
LDClientInit
struct LDClient * LDClientInit(struct LDConfig *const config, const unsigned int maxwaitmilli)
Initialize a new client, and connect to LaunchDarkly. It's important to make LDClient a singleton....