44#include < unordered_map>
55#include < vector>
66
7+ #include < google/protobuf/duration.pb.h>
8+ #include < google/protobuf/timestamp.pb.h>
9+ #include < grpcpp/client_context.h>
10+
711#include < boost/algorithm/string.hpp>
812#include < boost/blank.hpp>
913#include < boost/log/core.hpp>
1014#include < boost/log/expressions.hpp>
1115#include < boost/log/trivial.hpp>
1216#include < boost/optional/optional.hpp>
13- #include < grpcpp/client_context.h>
1417
1518#include < viam/api/common/v1/common.pb.h>
1619
2225namespace viam {
2326namespace sdk {
2427
25- std::vector<unsigned char > string_to_bytes (const std::string& s) {
26- std::vector<unsigned char > bytes (s.begin (), s.end ());
27- return bytes;
28- };
29-
30- std::string bytes_to_string (const std::vector<unsigned char >& b) {
31- std::string img_string (b.begin (), b.end ());
32- return img_string;
33- };
34-
35- time_pt timestamp_to_time_pt (const google::protobuf::Timestamp& timestamp) {
36- return time_pt{std::chrono::seconds{timestamp.seconds ()} +
37- std::chrono::nanoseconds{timestamp.nanos ()}};
28+ bool operator ==(const response_metadata& lhs, const response_metadata& rhs) {
29+ return lhs.captured_at == rhs.captured_at ;
3830}
3931
40- google::protobuf::Timestamp time_pt_to_timestamp (time_pt tp) {
32+ namespace proto_convert_details {
33+
34+ void to_proto<time_pt>::operator ()(time_pt tp, google::protobuf::Timestamp* result) const {
4135 const std::chrono::nanoseconds since_epoch = tp.time_since_epoch ();
4236
4337 const auto sec_floor = std::chrono::duration_cast<std::chrono::seconds>(since_epoch);
4438 const std::chrono::nanoseconds nano_part = since_epoch - sec_floor;
4539
46- google::protobuf::Timestamp result;
47-
48- result.set_seconds (sec_floor.count ());
49- result.set_nanos (static_cast <int32_t >(nano_part.count ()));
50-
51- return result;
40+ result->set_seconds (sec_floor.count ());
41+ result->set_nanos (static_cast <int32_t >(nano_part.count ()));
5242}
5343
54- response_metadata response_metadata:: from_proto( const viam::common::v1::ResponseMetadata& proto) {
55- response_metadata metadata;
56- metadata. captured_at = timestamp_to_time_pt (proto. captured_at ());
57- return metadata ;
44+ time_pt from_proto<google::protobuf::Timestamp>:: operator ()(
45+ const google::protobuf::Timestamp* timestamp) const {
46+ return time_pt{std::chrono::seconds{timestamp-> seconds ()} +
47+ std::chrono::nanoseconds{timestamp-> nanos ()}} ;
5848}
5949
60- viam::common::v1::ResponseMetadata response_metadata::to_proto (const response_metadata& metadata) {
61- viam::common::v1::ResponseMetadata proto;
62- google::protobuf::Timestamp ts = time_pt_to_timestamp (metadata.captured_at );
63- *proto.mutable_captured_at () = std::move (ts);
64- return proto;
50+ void to_proto<std::chrono::microseconds>::operator ()(std::chrono::microseconds duration,
51+ google::protobuf::Duration* proto) const {
52+ namespace sc = std::chrono;
53+
54+ const sc::seconds seconds = sc::duration_cast<sc::seconds>(duration);
55+ const sc::nanoseconds nanos = duration - seconds;
56+
57+ proto->set_nanos (static_cast <int32_t >(nanos.count ()));
58+ proto->set_seconds (seconds.count ());
6559}
6660
67- std::chrono::microseconds from_proto (const google::protobuf::Duration& proto) {
61+ std::chrono::microseconds from_proto<google::protobuf::Duration>::operator ()(
62+ const google::protobuf::Duration* proto) const {
6863 namespace sc = std::chrono;
69- const sc::seconds seconds_part{proto. seconds ()};
70- const sc::nanoseconds nanos_part{proto. nanos ()};
64+ const sc::seconds seconds_part{proto-> seconds ()};
65+ const sc::nanoseconds nanos_part{proto-> nanos ()};
7166
7267 const sc::microseconds from_seconds = sc::duration_cast<sc::microseconds>(seconds_part);
7368 sc::microseconds from_nanos = sc::duration_cast<sc::microseconds>(nanos_part);
@@ -80,16 +75,26 @@ std::chrono::microseconds from_proto(const google::protobuf::Duration& proto) {
8075 return from_seconds + from_nanos;
8176}
8277
83- google::protobuf::Duration to_proto (std::chrono::microseconds duration) {
84- namespace sc = std::chrono;
78+ void to_proto<response_metadata>::operator ()(const response_metadata& self,
79+ common::v1::ResponseMetadata* proto) const {
80+ *(proto->mutable_captured_at ()) = v2::to_proto (self.captured_at );
81+ }
8582
86- const sc::seconds seconds = sc::duration_cast<sc::seconds>(duration);
87- const sc::nanoseconds nanos = duration - seconds;
83+ response_metadata from_proto<common::v1::ResponseMetadata>::operator ()(
84+ const common::v1::ResponseMetadata* proto) const {
85+ return {v2::from_proto (proto->captured_at ())};
86+ }
87+
88+ } // namespace proto_convert_details
89+
90+ std::vector<unsigned char > string_to_bytes (const std::string& s) {
91+ std::vector<unsigned char > bytes (s.begin (), s.end ());
92+ return bytes;
93+ }
8894
89- google::protobuf::Duration proto;
90- proto.set_nanos (static_cast <int32_t >(nanos.count ()));
91- proto.set_seconds (seconds.count ());
92- return proto;
95+ std::string bytes_to_string (const std::vector<unsigned char >& b) {
96+ std::string img_string (b.begin (), b.end ());
97+ return img_string;
9398}
9499
95100void set_logger_severity_from_args (int argc, char ** argv) {
@@ -101,14 +106,6 @@ void set_logger_severity_from_args(int argc, char** argv) {
101106 boost::log::core::get ()->set_filter (boost::log::trivial::severity >= boost::log::trivial::info);
102107}
103108
104- bool operator ==(const response_metadata& lhs, const response_metadata& rhs) {
105- return lhs.captured_at == rhs.captured_at ;
106- }
107-
108- void ClientContext::set_client_ctx_authority_ () {
109- wrapped_context_.set_authority (" viam-placeholder" );
110- }
111-
112109std::string random_debug_key () {
113110 static const char alphanum[] = " abcdefghijklmnopqrstuvwxyz" ;
114111 static std::default_random_engine generator (
@@ -154,25 +151,35 @@ ProtoStruct with_debug_entry(ProtoStruct&& map) {
154151 return map;
155152}
156153
157- void ClientContext::set_debug_key (const std::string& debug_key) {
158- wrapped_context_.AddMetadata (" dtname" , debug_key);
159- }
160-
161- void ClientContext::add_viam_client_version_ () {
162- wrapped_context_.AddMetadata (" viam_client" , impl::k_version);
163- }
164-
165- ClientContext::ClientContext () {
154+ ClientContext::ClientContext () : wrapped_context_(std::make_unique<grpc::ClientContext>()) {
166155 set_client_ctx_authority_ ();
167156 add_viam_client_version_ ();
168157}
169158
159+ ClientContext::~ClientContext () = default ;
160+
170161ClientContext::operator const grpc::ClientContext*() const {
171- return & wrapped_context_;
162+ return wrapped_context_. get () ;
172163}
173164
174165ClientContext::operator grpc::ClientContext*() {
175- return &wrapped_context_;
166+ return wrapped_context_.get ();
167+ }
168+
169+ void ClientContext::try_cancel () {
170+ wrapped_context_->TryCancel ();
171+ }
172+
173+ void ClientContext::set_debug_key (const std::string& debug_key) {
174+ wrapped_context_->AddMetadata (" dtname" , debug_key);
175+ }
176+
177+ void ClientContext::set_client_ctx_authority_ () {
178+ wrapped_context_->set_authority (" viam-placeholder" );
179+ }
180+
181+ void ClientContext::add_viam_client_version_ () {
182+ wrapped_context_->AddMetadata (" viam_client" , impl::k_version);
176183}
177184
178185bool from_dm_from_extra (const ProtoStruct& extra) {
0 commit comments