Skip to content

Commit 8327dcd

Browse files
mwardMichael Wardvyazelenko
authored
[Rust] generated encoders now produce fluent interface (#1097)
Co-authored-by: Michael Ward <mward@drw.com> Co-authored-by: Dmytro Vyazelenko <696855+vyazelenko@users.noreply.github.com>
1 parent fa33cfc commit 8327dcd

4 files changed

Lines changed: 131 additions & 128 deletions

File tree

rust/tests/baseline_test.rs

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -181,24 +181,26 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
181181
);
182182
car = car.header(0).parent()?;
183183

184-
car.serial_number(1234);
185-
car.model_year(2013);
186-
car.available(BooleanType::T);
187-
car.code(Model::A);
188-
car.some_numbers(&[1, 2, 3, 4]);
189-
car.vehicle_code(&[97, 98, 99, 100, 101, 102]); // abcdef
190-
191-
extras.set_cruise_control(true);
192-
extras.set_sports_pack(true);
193-
extras.set_sun_roof(false);
184+
car.serial_number(1234)
185+
.model_year(2013)
186+
.available(BooleanType::T)
187+
.code(Model::A)
188+
.some_numbers(&[1, 2, 3, 4])
189+
.vehicle_code(&[97, 98, 99, 100, 101, 102]); // abcdef
190+
191+
extras
192+
.set_cruise_control(true)
193+
.set_sports_pack(true)
194+
.set_sun_roof(false);
194195
car.extras(extras);
195196

196197
let mut engine = car.engine_encoder();
197-
engine.capacity(2000);
198-
engine.num_cylinders(4);
199-
engine.manufacturer_code(&[49, 50, 51]); // 123
200-
engine.efficiency(35);
201-
engine.booster_enabled(BooleanType::T);
198+
engine
199+
.capacity(2000)
200+
.num_cylinders(4)
201+
.manufacturer_code(&[49, 50, 51]) // 123
202+
.efficiency(35)
203+
.booster_enabled(BooleanType::T);
202204
let mut booster = engine.booster_encoder();
203205
booster.boost_type(BoostType::NITROUS);
204206
booster.horse_power(200);
@@ -207,19 +209,22 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
207209
car = engine.parent()?;
208210
fuel_figures = car.fuel_figures_encoder(3, fuel_figures);
209211
assert_eq!(Some(0), fuel_figures.advance()?);
210-
fuel_figures.speed(30);
211-
fuel_figures.mpg(35.9);
212-
fuel_figures.usage_description(b"Urban Cycle");
212+
fuel_figures
213+
.speed(30)
214+
.mpg(35.9)
215+
.usage_description(b"Urban Cycle");
213216

214217
assert_eq!(Some(1), fuel_figures.advance()?);
215-
fuel_figures.speed(55);
216-
fuel_figures.mpg(49.0);
217-
fuel_figures.usage_description(b"Combined Cycle");
218+
fuel_figures
219+
.speed(55)
220+
.mpg(49.0)
221+
.usage_description(b"Combined Cycle");
218222

219223
assert_eq!(Some(2), fuel_figures.advance()?);
220-
fuel_figures.speed(75);
221-
fuel_figures.mpg(40.0);
222-
fuel_figures.usage_description(b"Highway Cycle");
224+
fuel_figures
225+
.speed(75)
226+
.mpg(40.0)
227+
.usage_description(b"Highway Cycle");
223228

224229
car = fuel_figures.parent()?;
225230
performance_figures = car.performance_figures_encoder(2, performance_figures);
@@ -228,48 +233,42 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
228233

229234
acceleration = performance_figures.acceleration_encoder(3, acceleration);
230235
assert_eq!(Some(0), acceleration.advance()?);
231-
acceleration.mph(30);
232-
acceleration.seconds(4.0);
236+
acceleration.mph(30).seconds(4.0);
233237

234238
assert_eq!(Some(1), acceleration.advance()?);
235-
acceleration.mph(60);
236-
acceleration.seconds(7.5);
239+
acceleration.mph(60).seconds(7.5);
237240

238241
assert_eq!(Some(2), acceleration.advance()?);
239-
acceleration.mph(100);
240-
acceleration.seconds(12.2);
242+
acceleration.mph(100).seconds(12.2);
241243

242244
performance_figures = acceleration.parent()?;
243245
assert_eq!(Some(1), performance_figures.advance()?);
244246
performance_figures.octane_rating(99);
245247

246248
acceleration = performance_figures.acceleration_encoder(3, acceleration);
247249
assert_eq!(Some(0), acceleration.advance()?);
248-
acceleration.mph(30);
249-
acceleration.seconds(3.8);
250+
acceleration.mph(30).seconds(3.8);
250251

251252
assert_eq!(Some(1), acceleration.advance()?);
252-
acceleration.mph(60);
253-
acceleration.seconds(7.1);
253+
acceleration.mph(60).seconds(7.1);
254254

255255
assert_eq!(Some(2), acceleration.advance()?);
256-
acceleration.mph(100);
257-
acceleration.seconds(11.8);
256+
acceleration.mph(100).seconds(11.8);
258257

259258
performance_figures = acceleration.parent()?;
260259
car = performance_figures.parent()?;
261260

262-
car.manufacturer("Honda");
263-
car.model("Civic VTi");
264-
car.activation_code(b"abcdef");
261+
car.manufacturer("Honda")
262+
.model("Civic VTi")
263+
.activation_code(b"abcdef");
265264

266265
let limit = car.get_limit();
267266
Ok((limit, buffer))
268267
}
269268

270269
#[test]
271270
fn test_issue_1018() {
272-
assert_eq!(1, examples_baseline::SBE_SCHEMA_ID);
273-
assert_eq!(0, examples_baseline::SBE_SCHEMA_VERSION);
274-
assert_eq!("5.2", examples_baseline::SBE_SEMANTIC_VERSION);
271+
assert_eq!(1, SBE_SCHEMA_ID);
272+
assert_eq!(0, SBE_SCHEMA_VERSION);
273+
assert_eq!("5.2", SBE_SEMANTIC_VERSION);
275274
}

rust/tests/big_endian_test.rs

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -175,45 +175,49 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
175175
);
176176
car = car.header(0).parent()?;
177177

178-
car.serial_number(1234);
179-
car.model_year(2013);
180-
car.available(BooleanType::T);
181-
car.code(Model::A);
182-
car.some_numbers(&[0, 1, 2, 3, 4]);
183-
car.vehicle_code(b"abcdef");
178+
car.serial_number(1234)
179+
.model_year(2013)
180+
.available(BooleanType::T)
181+
.code(Model::A)
182+
.some_numbers(&[0, 1, 2, 3, 4])
183+
.vehicle_code(b"abcdef");
184184

185185
extras.set_cruise_control(true);
186186
extras.set_sports_pack(true);
187187
extras.set_sun_roof(false);
188188
car.extras(extras);
189189

190190
let mut engine = car.engine_encoder();
191-
engine.capacity(2000);
192-
engine.num_cylinders(4);
193-
engine.manufacturer_code(b"123");
194-
engine.efficiency(35);
195-
engine.booster_enabled(BooleanType::T);
191+
engine
192+
.capacity(2000)
193+
.num_cylinders(4)
194+
.manufacturer_code(b"123")
195+
.efficiency(35)
196+
.booster_enabled(BooleanType::T);
197+
196198
let mut booster = engine.booster_encoder();
197-
booster.boost_type(BoostType::NITROUS);
198-
booster.horse_power(200);
199+
booster.boost_type(BoostType::NITROUS).horse_power(200);
199200

200201
engine = booster.parent()?;
201202
car = engine.parent()?;
202203
fuel_figures = car.fuel_figures_encoder(3, fuel_figures);
203204
assert_eq!(Some(0), fuel_figures.advance()?);
204-
fuel_figures.speed(30);
205-
fuel_figures.mpg(35.9);
206-
fuel_figures.usage_description("Urban Cycle");
205+
fuel_figures
206+
.speed(30)
207+
.mpg(35.9)
208+
.usage_description("Urban Cycle");
207209

208210
assert_eq!(Some(1), fuel_figures.advance()?);
209-
fuel_figures.speed(55);
210-
fuel_figures.mpg(49.0);
211-
fuel_figures.usage_description("Combined Cycle");
211+
fuel_figures
212+
.speed(55)
213+
.mpg(49.0)
214+
.usage_description("Combined Cycle");
212215

213216
assert_eq!(Some(2), fuel_figures.advance()?);
214-
fuel_figures.speed(75);
215-
fuel_figures.mpg(40.0);
216-
fuel_figures.usage_description("Highway Cycle");
217+
fuel_figures
218+
.speed(75)
219+
.mpg(40.0)
220+
.usage_description("Highway Cycle");
217221

218222
car = fuel_figures.parent()?;
219223
performance_figures = car.performance_figures_encoder(2, performance_figures);
@@ -222,40 +226,34 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
222226

223227
acceleration = performance_figures.acceleration_encoder(3, acceleration);
224228
assert_eq!(Some(0), acceleration.advance()?);
225-
acceleration.mph(30);
226-
acceleration.seconds(4.0);
229+
acceleration.mph(30).seconds(4.0);
227230

228231
assert_eq!(Some(1), acceleration.advance()?);
229-
acceleration.mph(60);
230-
acceleration.seconds(7.5);
232+
acceleration.mph(60).seconds(7.5);
231233

232234
assert_eq!(Some(2), acceleration.advance()?);
233-
acceleration.mph(100);
234-
acceleration.seconds(12.2);
235+
acceleration.mph(100).seconds(12.2);
235236

236237
performance_figures = acceleration.parent()?;
237238
assert_eq!(Some(1), performance_figures.advance()?);
238239
performance_figures.octane_rating(99);
239240

240241
acceleration = performance_figures.acceleration_encoder(3, acceleration);
241242
assert_eq!(Some(0), acceleration.advance()?);
242-
acceleration.mph(30);
243-
acceleration.seconds(3.8);
243+
acceleration.mph(30).seconds(3.8);
244244

245245
assert_eq!(Some(1), acceleration.advance()?);
246-
acceleration.mph(60);
247-
acceleration.seconds(7.1);
246+
acceleration.mph(60).seconds(7.1);
248247

249248
assert_eq!(Some(2), acceleration.advance()?);
250-
acceleration.mph(100);
251-
acceleration.seconds(11.8);
249+
acceleration.mph(100).seconds(11.8);
252250

253251
performance_figures = acceleration.parent()?;
254252
car = performance_figures.parent()?;
255253

256-
car.manufacturer("Honda");
257-
car.model("Civic VTi");
258-
car.activation_code("abcdef");
254+
car.manufacturer("Honda")
255+
.model("Civic VTi")
256+
.activation_code("abcdef");
259257

260258
let limit = car.get_limit();
261259
Ok((limit, buffer))

rust/tests/extension_test.rs

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -182,45 +182,49 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
182182
);
183183
car = car.header(0).parent()?;
184184

185-
car.serial_number(1234);
186-
car.model_year(2013);
187-
car.available(BooleanType::T);
188-
car.code(Model::A);
189-
car.some_numbers(&[0, 1, 2, 3]);
190-
car.vehicle_code_from_iter(b"abcdef_extra_is_ignored".into_iter().copied()); // abcdef
191-
192-
extras.set_cruise_control(true);
193-
extras.set_sports_pack(true);
194-
extras.set_sun_roof(false);
185+
car.serial_number(1234)
186+
.model_year(2013)
187+
.available(BooleanType::T)
188+
.code(Model::A)
189+
.some_numbers(&[0, 1, 2, 3])
190+
.vehicle_code_from_iter(b"abcdef_extra_is_ignored".into_iter().copied()); // abcdef
191+
192+
extras
193+
.set_cruise_control(true)
194+
.set_sports_pack(true)
195+
.set_sun_roof(false);
195196
car.extras(extras);
196197

197198
let mut engine = car.engine_encoder();
198-
engine.capacity(2000);
199-
engine.num_cylinders(4);
200-
engine.manufacturer_code(b"123");
201-
engine.efficiency(35);
202-
engine.booster_enabled(BooleanType::T);
199+
engine
200+
.capacity(2000)
201+
.num_cylinders(4)
202+
.manufacturer_code(b"123")
203+
.efficiency(35)
204+
.booster_enabled(BooleanType::T);
203205
let mut booster = engine.booster_encoder();
204-
booster.boost_type(BoostType::NITROUS);
205-
booster.horse_power(200);
206+
booster.boost_type(BoostType::NITROUS).horse_power(200);
206207

207208
engine = booster.parent()?;
208209
car = engine.parent()?;
209210
fuel_figures = car.fuel_figures_encoder(3, fuel_figures);
210211
assert_eq!(Some(0), fuel_figures.advance()?);
211-
fuel_figures.speed(30);
212-
fuel_figures.mpg(35.9);
213-
fuel_figures.usage_description(b"Urban Cycle");
212+
fuel_figures
213+
.speed(30)
214+
.mpg(35.9)
215+
.usage_description(b"Urban Cycle");
214216

215217
assert_eq!(Some(1), fuel_figures.advance()?);
216-
fuel_figures.speed(55);
217-
fuel_figures.mpg(49.0);
218-
fuel_figures.usage_description(b"Combined Cycle");
218+
fuel_figures
219+
.speed(55)
220+
.mpg(49.0)
221+
.usage_description(b"Combined Cycle");
219222

220223
assert_eq!(Some(2), fuel_figures.advance()?);
221-
fuel_figures.speed(75);
222-
fuel_figures.mpg(40.0);
223-
fuel_figures.usage_description(b"Highway Cycle");
224+
fuel_figures
225+
.speed(75)
226+
.mpg(40.0)
227+
.usage_description(b"Highway Cycle");
224228

225229
car = fuel_figures.parent()?;
226230
performance_figures = car.performance_figures_encoder(2, performance_figures);
@@ -229,40 +233,34 @@ fn encode_car_from_scratch() -> SbeResult<(usize, Vec<u8>)> {
229233

230234
acceleration = performance_figures.acceleration_encoder(3, acceleration);
231235
assert_eq!(Some(0), acceleration.advance()?);
232-
acceleration.mph(30);
233-
acceleration.seconds(4.0);
236+
acceleration.mph(30).seconds(4.0);
234237

235238
assert_eq!(Some(1), acceleration.advance()?);
236-
acceleration.mph(60);
237-
acceleration.seconds(7.5);
239+
acceleration.mph(60).seconds(7.5);
238240

239241
assert_eq!(Some(2), acceleration.advance()?);
240-
acceleration.mph(100);
241-
acceleration.seconds(12.2);
242+
acceleration.mph(100).seconds(12.2);
242243

243244
performance_figures = acceleration.parent()?;
244245
assert_eq!(Some(1), performance_figures.advance()?);
245246
performance_figures.octane_rating(99);
246247

247248
acceleration = performance_figures.acceleration_encoder(3, acceleration);
248249
assert_eq!(Some(0), acceleration.advance()?);
249-
acceleration.mph(30);
250-
acceleration.seconds(3.8);
250+
acceleration.mph(30).seconds(3.8);
251251

252252
assert_eq!(Some(1), acceleration.advance()?);
253-
acceleration.mph(60);
254-
acceleration.seconds(7.1);
253+
acceleration.mph(60).seconds(7.1);
255254

256255
assert_eq!(Some(2), acceleration.advance()?);
257-
acceleration.mph(100);
258-
acceleration.seconds(11.8);
256+
acceleration.mph(100).seconds(11.8);
259257

260258
performance_figures = acceleration.parent()?;
261259
car = performance_figures.parent()?;
262260

263-
car.manufacturer("Honda");
264-
car.model("Civic VTi");
265-
car.activation_code(b"abcdef");
261+
car.manufacturer("Honda")
262+
.model("Civic VTi")
263+
.activation_code(b"abcdef");
266264

267265
let limit = car.get_limit();
268266
Ok((limit, buffer))

0 commit comments

Comments
 (0)