Skip to content

Commit 1b1e66a

Browse files
authored
feat: implement remaining config C bindings (#90)
1 parent 6ab8e82 commit 1b1e66a

25 files changed

+1054
-149
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ option(BUILD_TESTING "Enable C++ unit tests." ON)
2626
option(TESTING_SANITIZERS "Enable sanitizers for unit tests." ON)
2727

2828
if (BUILD_TESTING)
29+
add_compile_definitions(LAUNCHDARKLY_USE_ASSERT)
2930
if (TESTING_SANITIZERS)
3031
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
3132
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=undefined -fsanitize=leak")
@@ -62,7 +63,7 @@ else ()
6263
else ()
6364
set(Boost_USE_STATIC_LIBS ON)
6465
endif ()
65-
endif()
66+
endif ()
6667

6768
set(Boost_USE_MULTITHREADED ON)
6869
set(Boost_USE_STATIC_RUNTIME OFF)

apps/hello-cpp/main.cpp

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,29 @@ int main() {
2525
return 1;
2626
}
2727

28-
Client client(
29-
ConfigBuilder(key)
30-
.ServiceEndpoints(
31-
launchdarkly::client_side::EndpointsBuilder()
32-
// Set to http to demonstrate redirect to https.
33-
.PollingBaseUrl("http://sdk.launchdarkly.com")
34-
.StreamingBaseUrl("https://stream.launchdarkly.com")
35-
.EventsBaseUrl("https://events.launchdarkly.com"))
36-
.DataSource(DataSourceBuilder()
37-
.Method(DataSourceBuilder::Polling().PollInterval(
38-
std::chrono::seconds{30}))
39-
.WithReasons(true)
40-
.UseReport(true))
41-
.Logging(LoggingBuilder::BasicLogging().Level(LogLevel::kDebug))
42-
.Events(launchdarkly::client_side::EventsBuilder().FlushInterval(
43-
std::chrono::seconds(5)))
44-
.Build()
45-
.value(),
46-
ContextBuilder().kind("user", "ryan").build());
28+
auto config_builder = ConfigBuilder(key);
29+
30+
config_builder.ServiceEndpoints()
31+
.PollingBaseUrl("http://sdk.launchdarkly.com")
32+
.StreamingBaseUrl("https://stream.launchdarkly.com")
33+
.EventsBaseUrl("https://events.launchdarkly.com");
34+
config_builder.DataSource()
35+
.Method(
36+
DataSourceBuilder::Polling().PollInterval(std::chrono::seconds{30}))
37+
.WithReasons(true)
38+
.UseReport(true);
39+
config_builder.Logging().Logging(
40+
LoggingBuilder::BasicLogging().Level(LogLevel::kDebug));
41+
config_builder.Events().FlushInterval(std::chrono::seconds(5));
42+
43+
auto config = config_builder.Build();
44+
if (!config) {
45+
std::cout << config.error();
46+
return 1;
47+
}
48+
49+
Client client(std::move(*config),
50+
ContextBuilder().kind("user", "ryan").build());
4751

4852
std::cout << "Initial Status: " << client.DataSourceStatus().Status()
4953
<< std::endl;

apps/sdk-contract-tests/src/entity_manager.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@ std::optional<std::string> EntityManager::create(ConfigParams const& in) {
3131
auto default_endpoints =
3232
launchdarkly::client_side::Defaults::ServiceEndpoints();
3333

34-
auto endpoints =
35-
EndpointsBuilder()
34+
auto& endpoints =
35+
config_builder.ServiceEndpoints()
3636
.EventsBaseUrl(default_endpoints.EventsBaseUrl())
3737
.PollingBaseUrl(default_endpoints.PollingBaseUrl())
3838
.StreamingBaseUrl(default_endpoints.StreamingBaseUrl());
3939

40-
auto datasource = DataSourceBuilder();
41-
4240
if (in.serviceEndpoints) {
4341
if (in.serviceEndpoints->streaming) {
4442
endpoints.StreamingBaseUrl(*in.serviceEndpoints->streaming);
@@ -57,6 +55,8 @@ std::optional<std::string> EntityManager::create(ConfigParams const& in) {
5755
}
5856
}
5957

58+
auto& datasource = config_builder.DataSource();
59+
6060
if (in.polling) {
6161
if (in.polling->baseUri) {
6262
endpoints.PollingBaseUrl(*in.polling->baseUri);
@@ -73,7 +73,7 @@ std::optional<std::string> EntityManager::create(ConfigParams const& in) {
7373
}
7474
}
7575

76-
auto event_config = EventsBuilder();
76+
auto& event_config = config_builder.Events();
7777

7878
if (in.events) {
7979
ConfigEventParams const& events = *in.events;
@@ -106,10 +106,6 @@ std::optional<std::string> EntityManager::create(ConfigParams const& in) {
106106
event_config.Disable();
107107
}
108108

109-
config_builder.Events(std::move(event_config));
110-
111-
config_builder.ServiceEndpoints(std::move(endpoints));
112-
113109
if (in.clientSide->evaluationReasons) {
114110
datasource.WithReasons(*in.clientSide->evaluationReasons);
115111
}
@@ -118,8 +114,6 @@ std::optional<std::string> EntityManager::create(ConfigParams const& in) {
118114
datasource.UseReport(*in.clientSide->useReport);
119115
}
120116

121-
config_builder.DataSource(std::move(datasource));
122-
123117
auto config = config_builder.Build();
124118
if (!config) {
125119
LD_LOG(logger_, LogLevel::kWarn)

0 commit comments

Comments
 (0)