blob: ce249a902613eec94394d85aa4097cf014f9b1a5 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fuchsia/ledger/cloud/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/async/cpp/task.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/sys/cpp/component_context.h>
#include <memory>
#include "src/ledger/cloud_provider_in_memory/lib/fake_cloud_provider.h"
#include "src/lib/fxl/macros.h"
namespace cloud_provider {
namespace {
class App {
public:
explicit App() : component_context_(sys::ComponentContext::Create()) {
FXL_DCHECK(component_context_);
}
~App() {}
bool Start() {
cloud_provider_impl_ = std::make_unique<ledger::FakeCloudProvider>();
component_context_->outgoing()->AddPublicService<CloudProvider>(
[this](fidl::InterfaceRequest<CloudProvider> request) {
cloud_provider_bindings_.AddBinding(cloud_provider_impl_.get(),
std::move(request));
});
return true;
}
private:
std::unique_ptr<sys::ComponentContext> component_context_;
std::unique_ptr<ledger::FakeCloudProvider> cloud_provider_impl_;
fidl::BindingSet<CloudProvider> cloud_provider_bindings_;
FXL_DISALLOW_COPY_AND_ASSIGN(App);
};
int Main(int argc, const char** argv) {
async::Loop loop(&kAsyncLoopConfigAttachToThread);
App app;
int return_code = 0;
async::PostTask(loop.dispatcher(), [&return_code, &app, &loop] {
if (!app.Start()) {
return_code = -1;
loop.Quit();
}
});
loop.Run();
return return_code;
}
} // namespace
} // namespace cloud_provider
int main(int argc, const char** argv) {
return cloud_provider::Main(argc, argv);
}