Skip to content

Commit 670d2ef

Browse files
committed
make to/from repeated field its own function object and a private detail
1 parent fbe2ea9 commit 670d2ef

File tree

11 files changed

+77
-80
lines changed

11 files changed

+77
-80
lines changed

src/viam/sdk/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ target_sources(viamsdk
143143
../../viam/sdk/common/linear_algebra.hpp
144144
../../viam/sdk/common/pose.hpp
145145
../../viam/sdk/common/proto_convert.hpp
146-
../../viam/sdk/common/proto_convert_vector.hpp
147146
../../viam/sdk/common/proto_value.hpp
148147
../../viam/sdk/common/service_helper.hpp
149148
../../viam/sdk/common/utils.hpp
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#pragma once
2+
3+
#include <vector>
4+
5+
#include <google/protobuf/repeated_field.h>
6+
7+
#include <viam/sdk/common/proto_convert.hpp>
8+
9+
namespace viam {
10+
namespace sdk {
11+
namespace impl {
12+
13+
struct to_repeated_field_ {
14+
template <typename T, typename = EquivalentApiType<T>>
15+
auto operator()(const std::vector<T>& v) const {
16+
::google::protobuf::RepeatedPtrField<EquivalentApiType<T>> result;
17+
result.Reserve(v.size());
18+
19+
for (const auto& elem : v) {
20+
*(result.Add()) = v2::to_proto(elem);
21+
}
22+
23+
return result;
24+
}
25+
};
26+
27+
struct from_repeated_field_ {
28+
template <typename T, typename = EquivalentSdkType<T>>
29+
auto operator()(const ::google::protobuf::RepeatedPtrField<T>& v) const {
30+
std::vector<EquivalentSdkType<T>> result;
31+
result.reserve(v.size());
32+
33+
for (const auto& elem : v) {
34+
result.push_back(v2::from_proto(elem));
35+
}
36+
37+
return result;
38+
}
39+
};
40+
41+
constexpr to_repeated_field_ to_repeated_field;
42+
constexpr from_repeated_field_ from_repeated_field;
43+
44+
} // namespace impl
45+
} // namespace sdk
46+
} // namespace viam

src/viam/sdk/common/proto_convert_vector.hpp

Lines changed: 0 additions & 51 deletions
This file was deleted.

src/viam/sdk/common/world_state.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <common/v1/common.pb.h>
44

55
#include <viam/sdk/common/pose.hpp>
6-
#include <viam/sdk/common/proto_convert_vector.hpp>
6+
#include <viam/sdk/common/private/repeated_ptr_convert.hpp>
77

88
namespace viam {
99
namespace sdk {
@@ -38,13 +38,13 @@ namespace proto_convert_details {
3838

3939
void to_proto<WorldState::geometries_in_frame>::operator()(
4040
const WorldState::geometries_in_frame& self, common::v1::GeometriesInFrame* proto) const {
41-
*(proto->mutable_geometries()) = v2::to_proto(self.geometries);
41+
*(proto->mutable_geometries()) = impl::to_repeated_field(self.geometries);
4242
*(proto->mutable_reference_frame()) = self.reference_frame;
4343
}
4444

4545
WorldState::geometries_in_frame from_proto<common::v1::GeometriesInFrame>::operator()(
4646
const common::v1::GeometriesInFrame* proto) const {
47-
return {v2::from_proto(proto->geometries()), proto->reference_frame()};
47+
return {impl::from_repeated_field(proto->geometries()), proto->reference_frame()};
4848
}
4949

5050
void to_proto<WorldState::transform>::operator()(const WorldState::transform& self,
@@ -68,13 +68,14 @@ WorldState::transform from_proto<common::v1::Transform>::operator()(
6868
}
6969

7070
void to_proto<WorldState>::operator()(const WorldState& self, common::v1::WorldState* proto) const {
71-
*(proto->mutable_obstacles()) = v2::to_proto(self.obstacles());
72-
*(proto->mutable_transforms()) = v2::to_proto(self.transforms());
71+
*(proto->mutable_obstacles()) = impl::to_repeated_field(self.obstacles());
72+
*(proto->mutable_transforms()) = impl::to_repeated_field(self.transforms());
7373
}
7474

7575
WorldState from_proto<common::v1::WorldState>::operator()(
7676
const common::v1::WorldState* proto) const {
77-
return WorldState(v2::from_proto(proto->obstacles()), v2::from_proto(proto->transforms()));
77+
return WorldState(impl::from_repeated_field(proto->obstacles()),
78+
impl::from_repeated_field(proto->transforms()));
7879
}
7980

8081
} // namespace proto_convert_details

src/viam/sdk/robot/client.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ std::vector<RobotClient::frame_system_config> RobotClient::get_frame_system_conf
368368
viam::robot::v1::FrameSystemConfigResponse resp;
369369
ClientContext ctx;
370370

371-
*(req.mutable_supplemental_transforms()) = v2::to_proto(additional_transforms);
371+
*(req.mutable_supplemental_transforms()) = sdk::impl::to_repeated_field(additional_transforms);
372372

373373
const grpc::Status response = impl_->stub_->FrameSystemConfig(ctx, req, &resp);
374374
if (is_error_response(response)) {
@@ -397,7 +397,7 @@ pose_in_frame RobotClient::transform_pose(
397397

398398
*req.mutable_source() = v2::to_proto(query);
399399
*req.mutable_destination() = std::move(destination);
400-
*req.mutable_supplemental_transforms() = v2::to_proto(additional_transforms);
400+
*req.mutable_supplemental_transforms() = sdk::impl::to_repeated_field(additional_transforms);
401401

402402
const grpc::Status response = impl_->stub_->TransformPose(ctx, req, &resp);
403403
if (is_error_response(response)) {

src/viam/sdk/services/private/motion_client.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <viam/api/service/motion/v1/motion.pb.h>
99

1010
#include <viam/sdk/common/client_helper.hpp>
11-
#include <viam/sdk/common/proto_convert_vector.hpp>
11+
#include <viam/sdk/common/private/repeated_ptr_convert.hpp>
1212
#include <viam/sdk/common/proto_value.hpp>
1313
#include <viam/sdk/common/utils.hpp>
1414
#include <viam/sdk/services/motion.hpp>
@@ -246,13 +246,13 @@ std::string MotionClient::move_on_globe(
246246
request.set_heading(*heading);
247247
}
248248

249-
*request.mutable_obstacles() = v2::to_proto(obstacles);
249+
*request.mutable_obstacles() = impl::to_repeated_field(obstacles);
250250

251251
if (motion_configuration) {
252252
*request.mutable_motion_configuration() = to_proto(*motion_configuration);
253253
}
254254

255-
*request.mutable_bounding_regions() = v2::to_proto(bounding_regions);
255+
*request.mutable_bounding_regions() = impl::to_repeated_field(bounding_regions);
256256
})
257257
.invoke([](auto& response) { return response.execution_id(); });
258258
}
@@ -268,7 +268,7 @@ pose_in_frame MotionClient::get_pose(
268268
*request.mutable_component_name() = component_name.to_proto();
269269
*request.mutable_destination_frame() = destination_frame;
270270
*request.mutable_supplemental_transforms() =
271-
v2::to_proto(supplemental_transforms);
271+
impl::to_repeated_field(supplemental_transforms);
272272
})
273273
.invoke([](auto& response) { return v2::from_proto(response.pose()); });
274274
}

src/viam/sdk/services/private/motion_server.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
#include <viam/sdk/common/exception.hpp>
66
#include <viam/sdk/common/pose.hpp>
7-
#include <viam/sdk/common/proto_convert_vector.hpp>
7+
#include <viam/sdk/common/private/repeated_ptr_convert.hpp>
88
#include <viam/sdk/common/proto_value.hpp>
99
#include <viam/sdk/common/service_helper.hpp>
1010
#include <viam/sdk/common/utils.hpp>
@@ -232,9 +232,9 @@ ::grpc::Status MotionServer::MoveOnGlobe(
232232
const auto destination = v2::from_proto(request->destination());
233233
const auto component_name = Name::from_proto(request->component_name());
234234
const auto movement_sensor_name = Name::from_proto(request->movement_sensor_name());
235-
const std::vector<geo_geometry> obstacles = v2::from_proto(request->obstacles());
235+
const std::vector<geo_geometry> obstacles = impl::from_repeated_field(request->obstacles());
236236
const std::vector<geo_geometry> bounding_regions =
237-
v2::from_proto(request->bounding_regions());
237+
impl::from_repeated_field(request->bounding_regions());
238238

239239
boost::optional<double> heading;
240240
if (request->has_heading()) {

src/viam/sdk/services/private/navigation_client.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <viam/api/service/navigation/v1/navigation.pb.h>
99

1010
#include <viam/sdk/common/client_helper.hpp>
11-
#include <viam/sdk/common/proto_convert_vector.hpp>
11+
#include <viam/sdk/common/private/repeated_ptr_convert.hpp>
1212
#include <viam/sdk/common/proto_value.hpp>
1313
#include <viam/sdk/common/utils.hpp>
1414
#include <viam/sdk/services/navigation.hpp>
@@ -21,7 +21,7 @@ namespace proto_convert_details {
2121
template <>
2222
struct from_proto<service::navigation::v1::Path> {
2323
Navigation::Path operator()(const service::navigation::v1::Path* proto) const {
24-
return {proto->destination_waypoint_id(), v2::from_proto(proto->geopoints())};
24+
return {proto->destination_waypoint_id(), impl::from_repeated_field(proto->geopoints())};
2525
}
2626
};
2727

@@ -72,7 +72,7 @@ Navigation::LocationResponse NavigationClient::get_location(const ProtoStruct& e
7272
std::vector<Navigation::Waypoint> NavigationClient::get_waypoints(const ProtoStruct& extra) {
7373
return make_client_helper(this, *stub_, &StubType::GetWaypoints)
7474
.with([&](auto& request) { *request.mutable_extra() = v2::to_proto(extra); })
75-
.invoke([](auto& response) { return v2::from_proto(response.waypoints()); });
75+
.invoke([](auto& response) { return impl::from_repeated_field(response.waypoints()); });
7676
}
7777

7878
void NavigationClient::add_waypoint(const geo_point& location, const ProtoStruct& extra) {
@@ -96,13 +96,13 @@ void NavigationClient::remove_waypoint(const std::string id, const ProtoStruct&
9696
std::vector<geo_geometry> NavigationClient::get_obstacles(const ProtoStruct& extra) {
9797
return make_client_helper(this, *stub_, &StubType::GetObstacles)
9898
.with([&](auto& request) { *request.mutable_extra() = v2::to_proto(extra); })
99-
.invoke([](auto& response) { return v2::from_proto(response.obstacles()); });
99+
.invoke([](auto& response) { return impl::from_repeated_field(response.obstacles()); });
100100
}
101101

102102
std::vector<NavigationClient::Path> NavigationClient::get_paths(const ProtoStruct& extra) {
103103
return make_client_helper(this, *stub_, &StubType::GetPaths)
104104
.with([&](auto& request) { *request.mutable_extra() = v2::to_proto(extra); })
105-
.invoke([](auto& response) { return v2::from_proto(response.paths()); });
105+
.invoke([](auto& response) { return impl::from_repeated_field(response.paths()); });
106106
}
107107

108108
NavigationClient::Properties NavigationClient::get_properties() {

src/viam/sdk/services/private/navigation_server.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ template <>
1919
struct to_proto<Navigation::Path> {
2020
void operator()(const Navigation::Path& self, service::navigation::v1::Path* proto) const {
2121
*(proto->mutable_destination_waypoint_id()) = self.destination_waypoint_id;
22-
*(proto->mutable_geopoints()) = v2::to_proto(self.geopoints);
22+
*(proto->mutable_geopoints()) = impl::to_repeated_field(self.geopoints);
2323
}
2424
};
2525

@@ -72,7 +72,8 @@ ::grpc::Status NavigationServer::GetWaypoints(::grpc::ServerContext*,
7272
GetWaypointsResponse* response) noexcept {
7373
return make_service_helper<Navigation>(
7474
"NavigationServer::GetWaypoints", this, request)([&](auto& helper, auto& nav) {
75-
*(response->mutable_waypoints()) = v2::to_proto(nav->get_waypoints(helper.getExtra()));
75+
*(response->mutable_waypoints()) =
76+
impl::to_repeated_field(nav->get_waypoints(helper.getExtra()));
7677
});
7778
}
7879

@@ -97,7 +98,8 @@ ::grpc::Status NavigationServer::GetObstacles(::grpc::ServerContext*,
9798
GetObstaclesResponse* response) noexcept {
9899
return make_service_helper<Navigation>(
99100
"NavigationServer::GetObstacles", this, request)([&](auto& helper, auto& nav) {
100-
*(response->mutable_obstacles()) = v2::to_proto(nav->get_obstacles(helper.getExtra()));
101+
*(response->mutable_obstacles()) =
102+
impl::to_repeated_field(nav->get_obstacles(helper.getExtra()));
101103
});
102104
}
103105

@@ -106,7 +108,7 @@ ::grpc::Status NavigationServer::GetPaths(::grpc::ServerContext*,
106108
GetPathsResponse* response) noexcept {
107109
return make_service_helper<Navigation>(
108110
"NavigationServer::GetPaths", this, request)([&](auto& helper, auto& nav) {
109-
*response->mutable_paths() = v2::to_proto(nav->get_paths(helper.getExtra()));
111+
*response->mutable_paths() = impl::to_repeated_field(nav->get_paths(helper.getExtra()));
110112
});
111113
}
112114

src/viam/sdk/spatialmath/geometry.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,17 @@ geo_point from_proto<common::v1::GeoPoint>::operator()(const common::v1::GeoPoin
198198
void to_proto<geo_geometry>::operator()(const geo_geometry& self,
199199
common::v1::GeoGeometry* proto) const {
200200
*(proto->mutable_location()) = v2::to_proto(self.location);
201-
*(proto->mutable_geometries()) = v2::to_proto(self.geometries);
201+
*(proto->mutable_geometries()) = impl::to_repeated_field(self.geometries);
202202
}
203203

204204
geo_geometry from_proto<common::v1::GeoGeometry>::operator()(
205205
const common::v1::GeoGeometry* proto) const {
206-
return {v2::from_proto(proto->location()), v2::from_proto(proto->geometries())};
206+
return {v2::from_proto(proto->location()), impl::from_repeated_field(proto->geometries())};
207207
}
208208

209209
std::vector<GeometryConfig> from_proto<common::v1::GetGeometriesResponse>::operator()(
210210
const common::v1::GetGeometriesResponse* proto) const {
211-
return v2::from_proto(proto->geometries());
211+
return impl::from_repeated_field(proto->geometries());
212212
}
213213

214214
} // namespace proto_convert_details

0 commit comments

Comments
 (0)