blob: 8430a44710834c1937bf94ea7de5acdc7a43fbd3 [file] [log] [blame]
// Copyright 2024 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 <fidl/fuchsia.hardware.power/cpp/fidl.h>
#include <lib/driver/power/cpp/element-description-builder.h>
#include <lib/zx/event.h>
#if FUCHSIA_API_LEVEL_AT_LEAST(HEAD)
namespace fdf_power {
ElementDesc ElementDescBuilder::Build() {
ElementDesc to_return;
to_return.element_config = element_config;
to_return.tokens = std::move(tokens_);
if (this->assertive_token_.has_value()) {
to_return.assertive_token = std::move(this->assertive_token_.value());
} else {
// make an event instead
zx::event::create(0, &to_return.assertive_token);
}
if (this->opportunistic_token_.has_value()) {
to_return.opportunistic_token = std::move(this->opportunistic_token_.value());
} else {
// make an event instead
zx::event::create(0, &to_return.opportunistic_token);
}
if (this->lessor_.has_value()) {
to_return.lessor_server = std::move(this->lessor_.value());
} else {
// make a channel instead, include it in output
fidl::Endpoints<fuchsia_power_broker::Lessor> endpoints =
fidl::CreateEndpoints<fuchsia_power_broker::Lessor>().value();
to_return.lessor_client = std::move(endpoints.client);
to_return.lessor_server = std::move(endpoints.server);
}
if (this->element_control_.has_value()) {
to_return.element_control_server = std::move(this->element_control_.value());
} else {
// make a channel instead, include it in output
fidl::Endpoints<fuchsia_power_broker::ElementControl> endpoints =
fidl::CreateEndpoints<fuchsia_power_broker::ElementControl>().value();
to_return.element_control_client = std::move(endpoints.client);
to_return.element_control_server = std::move(endpoints.server);
}
if (this->element_runner_.has_value()) {
to_return.element_runner_client = std::move(this->element_runner_.value());
} else {
// make a channel instead, include it in output
fidl::Endpoints<fuchsia_power_broker::ElementRunner> endpoints =
fidl::CreateEndpoints<fuchsia_power_broker::ElementRunner>().value();
to_return.element_runner_client = std::move(endpoints.client);
to_return.element_runner_server = std::move(endpoints.server);
}
return to_return;
}
ElementDescBuilder& ElementDescBuilder::SetAssertiveToken(
const zx::unowned_event& assertive_token) {
zx::event dupe;
assertive_token->duplicate(ZX_RIGHT_SAME_RIGHTS, &dupe);
assertive_token_ = std::move(dupe);
return *this;
}
ElementDescBuilder& ElementDescBuilder::SetOpportunisticToken(
const zx::unowned_event& opportunistic_token) {
zx::event dupe;
opportunistic_token->duplicate(ZX_RIGHT_SAME_RIGHTS, &dupe);
opportunistic_token_ = std::move(dupe);
return *this;
}
ElementDescBuilder& ElementDescBuilder::SetLessor(
fidl::ServerEnd<fuchsia_power_broker::Lessor> lessor) {
lessor_ = std::move(lessor);
return *this;
}
ElementDescBuilder& ElementDescBuilder::SetElementControl(
fidl::ServerEnd<fuchsia_power_broker::ElementControl> element_control) {
element_control_ = std::move(element_control);
return *this;
}
ElementDescBuilder& ElementDescBuilder::SetElementRunner(
fidl::ClientEnd<fuchsia_power_broker::ElementRunner> element_runner) {
element_runner_ = std::move(element_runner);
return *this;
}
} // namespace fdf_power
#endif