blob: 2fa17d9ef7c76e9e12ac7860ab019e796238ee5a [file]
// Part of the Crubit project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "rs_bindings_from_cc/test/bridging/composable_bridging_lib.h"
#include <optional>
#include <string>
#include <string_view>
#include <utility>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "support/rs_std/slice_ref.h"
Vec3<float> MakeVec3(float x, float y, float z) {
return {
.x = x,
.y = y,
.z = z,
};
}
std::optional<Vec3<float>> MakeOptionalVec3(float x, float y, float z,
bool is_present) {
if (!is_present) {
return std::nullopt;
}
return {{x, y, z}};
}
std::optional<Vec3<float>> MapMultiply(std::optional<Vec3<float>> v,
float factor) {
if (!v.has_value()) {
return std::nullopt;
}
return {{
.x = v->x * factor,
.y = v->y * factor,
.z = v->z * factor,
}};
}
std::pair<std::pair<int, float>, bool> MakePair(int a, float b, bool c) {
return {{a, b}, c};
}
std::pair<std::optional<int>, std::optional<std::pair<float, Vec3<float>>>>
MakeStuff() {
return {std::nullopt, {{3.14f, {1.0f, 2.0f, 3.0f}}}};
}
Vec3<Stuff> MakeVec3OfStructs(Stuff x, Stuff y, Stuff z) { return {x, y, z}; }
std::string ReturnProperGreeting() { return "Hello, world!"; }
bool IsProperGreeting(std::string greeting) {
return greeting == "Hello, world!";
}
std::pair<std::string, Stuff> ProperlyGreetStuff(Stuff stuff) {
return {"Hello, world!", stuff};
}
std::string_view StringViewByValue(std::string_view sv) { return sv; }
std::optional<std::string_view> ReturnOptionalStringView(bool is_present,
std::string_view sv) {
if (!is_present) {
return std::nullopt;
}
return sv;
}
rs_std::SliceRef<const std::string_view> ReturnSliceRefStringView(
rs_std::SliceRef<const std::string_view> slice) {
return slice;
}
absl::StatusOr<void*> AcceptsVoidPtrAndReturnsStatusErrorIfNull(void* ptr) {
if (ptr == nullptr) {
return absl::InvalidArgumentError("ptr is null");
}
return ptr;
}
absl::StatusOr<rs_std::SliceRef<const int>>
AcceptsSliceAndReturnsStatusErrorIfEmpty(rs_std::SliceRef<const int> slice) {
if (slice.size() == 0) {
return absl::InvalidArgumentError("slice is empty");
}
return slice;
}