simone-coelho / go-sdk-c-wrapper

A C wrapper for the Go SDK enabling Full Stack and Rollouts in C.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Optimizely Go SDK C Wrapper

This repository contains a Go SDK C wrapper that enables the Go SDK to be used in C, C++ and other languages compiled to native code. This SDK is currently in Alpha.

Installation

Download then build the SDK as shown below.

Install from source:

make

Usage

Instantiation

Include the headerfile and initialize the SDK with an SDK Key. The returned handle should be used in subsequent calls.

#include <optimizely/optimizely-sdk.h>
...
int handle = optimizely_sdk_client("<sdk key>");

See API for more details.

Example: Feature Rollouts

To see if a feature has been enabled initialize the SDK then call is_feature_enabled function.

...
int handle = optimizely_sdk_client(sdkkey);
if (handle == -1) {
	fprintf(stderr, "failed to initialize Optimizely SDK\n");
	return 1;
}
char *err = NULL;
int enabled = optimizely_sdk_is_feature_enabled(handle, feature_name, &attrib, &err);
...

For a full example see examples/is-feature-enabled.c.

API

Important: All strings and string arrays returned by the API must be free'd by the caller.

typedef struct optimizely_user_attribute {
	char *name;
	int var_type; // 1 = string, 2 = bool, 3 = float, 4 = int
	void *data;
} optimzely_user_attribute;

typedef struct optimizely_user_attributes {
	char *id;
	int num_attributes;
	struct optimizely_user_attribute *user_attribute_list;
} optimizely_user_attributes;

// reintializes the SDK and creates a new handle table
int optimizely_sdk_init();

// creates a new optimizely SDK and returns a handle or returns -1 if the sdk could not be initialized
int optimizely_sdk_client(char* sdkkey);

// removes the passed in client handle
void optimizely_sdk_delete_client(int handle);

// checks to see if feature_name is enabled, non zero return means the feature is enabled
int optimizely_sdk_is_feature_enabled(int handle, char* feature_name,
                                      optimizely_user_attributes* attributes, char** error);

// returns the string feature variable value
char* optimizely_sdk_get_feature_variable_string(int handle, char* feature_name, char* variable_key,
                                                 optimizely_user_attributes* attributes, char** error);

// returns the boolean feature variable value
int optimizely_sdk_get_feature_variable_boolean(int handle, char* feature_name, char* variable_key,
                                                optimizely_user_attributes* attributes, char** error);

// returns the double feature variable value
double optimizely_sdk_get_feature_variable_double(int handle, char* feature_name, char* variable_key,
                                                  optimizely_user_attributes* attributes,
                                                  char** error);

// returns the integer feature variable value
int optimizely_sdk_get_feature_variable_integer(int handle, char* feature_name, char* variable_key,
                                                optimizely_user_attributes* attributes, char** error);

// returns the variation for the specified experiment key and user attributes
char* optimizely_sdk_get_variation(int handle, char* experiment_key,
                                   optimizely_user_attributes* attributes, char** error);

// returns the feature variable for the specified feature_name and variable_key
// the variable_type receives a string specifying the variable type
char* optimizely_sdk_get_feature_variable(int handle, char* feature_name, char* variable_key,
                                          optimizely_user_attributes* attributes,
                                          char** variable_type, char** error);

// activates the specified experiment_key
char* optimizely_sdk_activate(int handle, char* experiment_key,
                              optimizely_user_attributes* attributes, char** error);

// returns a list of the enabled features, the count receives the number of features returned
char** optimizely_sdk_get_enabled_features(int handle, optimizely_user_attributes* attributes,
                                           int* count, char** error);

// returns a list of the enabled feature variables, count contains the feature variable count
// to get the value of a feature variable call optimizely_sdk_get_feature_variable_<type>()
char** optimizely_sdk_get_all_feature_variables(int handle, char* feature_key,
                                                optimizely_user_attributes* attributes,
                                                int* enabled, int* count, char** error);

// tracks the specified event_key
char* optimizely_sdk_track(int handle, char* event_key, optimizely_user_attributes* attributes,
                           float* value, char** error);

Credits

This software is built with the following software.

About

A C wrapper for the Go SDK enabling Full Stack and Rollouts in C.

License:Apache License 2.0


Languages

Language:Go 98.0%Language:Makefile 2.0%