12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
- #include < zenoh.h>
16
-
17
15
#include < cstdlib>
18
16
#include < cstring>
19
17
#include < stdexcept>
18
+ #include < string>
20
19
#include < string_view>
21
20
#include < utility>
21
+ #include < vector>
22
+
23
+ #include < zenoh.hxx>
22
24
23
25
#include " rmw/types.h"
24
26
27
29
28
30
namespace rmw_zenoh_cpp
29
31
{
30
- // /=============================================================================
32
+
31
33
AttachmentData::AttachmentData (
32
- const int64_t sequence_number,
33
- const int64_t source_timestamp,
34
- const uint8_t source_gid[RMW_GID_STORAGE_SIZE])
35
- : sequence_number_(sequence_number),
36
- source_timestamp_ (source_timestamp)
34
+ const int64_t _sequence_number,
35
+ const int64_t _source_timestamp,
36
+ const std::vector<uint8_t > _source_gid)
37
37
{
38
- memcpy (source_gid_, source_gid, RMW_GID_STORAGE_SIZE);
38
+ sequence_number_ = _sequence_number;
39
+ source_timestamp_ = _source_timestamp;
40
+ source_gid_ = _source_gid;
39
41
gid_hash_ = hash_gid (source_gid_);
40
42
}
41
43
42
- // /=============================================================================
43
44
AttachmentData::AttachmentData (AttachmentData && data)
44
- : sequence_number_(std::move(data.sequence_number_)),
45
- source_timestamp_(std::move(data.source_timestamp_)),
46
- gid_hash_(std::move(data.gid_hash_))
47
- {
48
- memcpy (source_gid_, data.source_gid_ , RMW_GID_STORAGE_SIZE);
49
- }
50
-
51
- // /=============================================================================
52
- AttachmentData::AttachmentData (const z_loaned_bytes_t * attachment)
53
45
{
54
- ze_deserializer_t deserializer = ze_deserializer_from_bytes (attachment);
55
- z_owned_string_t key;
56
-
57
- // Deserialize the sequence_number
58
- ze_deserializer_deserialize_string (&deserializer, &key);
59
- if (std::string_view (
60
- z_string_data (z_loan (key)),
61
- z_string_len (z_loan (key))) != " sequence_number" )
62
- {
63
- throw std::runtime_error (" sequence_number is not found in the attachment." );
64
- }
65
- z_drop (z_move (key));
66
- if (ze_deserializer_deserialize_int64 (&deserializer, &this ->sequence_number_ )) {
67
- throw std::runtime_error (" Failed to deserialize the sequence_number." );
68
- }
69
-
70
- // Deserialize the source_timestamp
71
- ze_deserializer_deserialize_string (&deserializer, &key);
72
- if (std::string_view (
73
- z_string_data (z_loan (key)),
74
- z_string_len (z_loan (key))) != " source_timestamp" )
75
- {
76
- throw std::runtime_error (" source_timestamp is not found in the attachment" );
77
- }
78
- z_drop (z_move (key));
79
- if (ze_deserializer_deserialize_int64 (&deserializer, &this ->source_timestamp_ )) {
80
- throw std::runtime_error (" Failed to deserialize the source_timestamp." );
81
- }
82
-
83
- // Deserialize the source_gid
84
- ze_deserializer_deserialize_string (&deserializer, &key);
85
- if (std::string_view (z_string_data (z_loan (key)), z_string_len (z_loan (key))) != " source_gid" ) {
86
- throw std::runtime_error (" Invalid attachment: the key source_gid is not found" );
87
- }
88
- z_drop (z_move (key));
89
- z_owned_slice_t slice;
90
- if (ze_deserializer_deserialize_slice (&deserializer, &slice)) {
91
- throw std::runtime_error (" Failed to deserialize the source_gid." );
92
- }
93
- if (z_slice_len (z_loan (slice)) != RMW_GID_STORAGE_SIZE) {
94
- throw std::runtime_error (" The length of source_gid mismatched." );
95
- }
96
- memcpy (this ->source_gid_ , z_slice_data (z_loan (slice)), z_slice_len (z_loan (slice)));
97
- z_drop (z_move (slice));
98
- gid_hash_ = hash_gid (this ->source_gid_ );
46
+ gid_hash_ = std::move (data.gid_hash_ );
47
+ sequence_number_ = std::move (data.sequence_number_ );
48
+ source_timestamp_ = std::move (data.source_timestamp_ );
49
+ source_gid_ = data.source_gid_ ;
99
50
}
100
51
101
52
// /=============================================================================
@@ -111,9 +62,9 @@ int64_t AttachmentData::source_timestamp() const
111
62
}
112
63
113
64
// /=============================================================================
114
- void AttachmentData::copy_gid (uint8_t out_gid[RMW_GID_STORAGE_SIZE] ) const
65
+ std::vector< uint8_t > AttachmentData::copy_gid () const
115
66
{
116
- memcpy (out_gid, source_gid_, RMW_GID_STORAGE_SIZE) ;
67
+ return source_gid_;
117
68
}
118
69
119
70
// /=============================================================================
@@ -122,17 +73,38 @@ size_t AttachmentData::gid_hash() const
122
73
return gid_hash_;
123
74
}
124
75
125
- // /=============================================================================
126
- void AttachmentData::serialize_to_zbytes (z_owned_bytes_t * attachment)
76
+ zenoh::Bytes AttachmentData::serialize_to_zbytes ()
77
+ {
78
+ auto serializer = zenoh::ext::Serializer ();
79
+ serializer.serialize (std::string (" sequence_number" ));
80
+ serializer.serialize (this ->sequence_number_ );
81
+ serializer.serialize (std::string (" source_timestamp" ));
82
+ serializer.serialize (this ->source_timestamp_ );
83
+ serializer.serialize (std::string (" source_gid" ));
84
+ serializer.serialize (this ->source_gid_ );
85
+ return std::move (serializer).finish ();
86
+ }
87
+
88
+ AttachmentData::AttachmentData (const zenoh::Bytes & attachment)
127
89
{
128
- ze_owned_serializer_t serializer;
129
- ze_serializer_empty (&serializer);
130
- ze_serializer_serialize_str (z_loan_mut (serializer), " sequence_number" );
131
- ze_serializer_serialize_int64 (z_loan_mut (serializer), this ->sequence_number_ );
132
- ze_serializer_serialize_str (z_loan_mut (serializer), " source_timestamp" );
133
- ze_serializer_serialize_int64 (z_loan_mut (serializer), this ->source_timestamp_ );
134
- ze_serializer_serialize_str (z_loan_mut (serializer), " source_gid" );
135
- ze_serializer_serialize_buf (z_loan_mut (serializer), this ->source_gid_ , RMW_GID_STORAGE_SIZE);
136
- ze_serializer_finish (z_move (serializer), attachment);
90
+ zenoh::ext::Deserializer deserializer (std::move (attachment));
91
+ const auto sequence_number_str = deserializer.deserialize <std::string>();
92
+ if (sequence_number_str != " sequence_number" ) {
93
+ throw std::runtime_error (" sequence_number is not found in the attachment." );
94
+ }
95
+ this ->sequence_number_ = deserializer.deserialize <int64_t >();
96
+
97
+ const auto source_timestamp_str = deserializer.deserialize <std::string>();
98
+ if (source_timestamp_str != " source_timestamp" ) {
99
+ throw std::runtime_error (" source_timestamp is not found in the attachment." );
100
+ }
101
+ this ->source_timestamp_ = deserializer.deserialize <int64_t >();
102
+
103
+ const auto source_gid_str = deserializer.deserialize <std::string>();
104
+ if (source_gid_str != " source_gid" ) {
105
+ throw std::runtime_error (" source_gid is not found in the attachment." );
106
+ }
107
+ this ->source_gid_ = deserializer.deserialize <std::vector<uint8_t >>();
108
+ gid_hash_ = hash_gid (this ->source_gid_ );
137
109
}
138
110
} // namespace rmw_zenoh_cpp
0 commit comments