Явор качи първо решение на 03.12.2019 01:27 (преди почти 6 години)
Добро решение. Има някои места, на които можеш да си съкратиш кода и/или да го направиш по-четим.
Compiling solution v0.1.0 (/tmp/d20200111-2173579-iq9ora/solution) Finished test [unoptimized + debuginfo] target(s) in 3.73s Running target/debug/deps/solution-a73e64ec87929bd0 running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Running target/debug/deps/solution_test-38971695424b36d5 running 15 tests test solution_test::test_construct_packet_from_unicode ... ok test solution_test::test_construct_packet_no_remainder ... ok test solution_test::test_construct_packet_with_remainder ... ok test solution_test::test_construct_packet_with_remainder_cyrillic ... ok test solution_test::test_consuming_packets ... ok test solution_test::test_deserialize_invalid_packet ... ok test solution_test::test_deserialize_packet ... ok test solution_test::test_deserialize_unicode_packet ... ok test solution_test::test_full_roundtrip ... ok test solution_test::test_full_roundtrip_for_zero_size_string ... ok test solution_test::test_invalid_packet_combination ... ok test solution_test::test_iterating_packets ... ok test solution_test::test_iterating_packets_for_zero_size_string ... ok test solution_test::test_serialize_packet ... ok test solution_test::test_zero_size ... ok test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Doc-tests solution running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Добро решение. Има някои места, на които можеш да си съкратиш кода и/или да го направиш по-четим.
Тук можеш директно да pattern-match-неш двете части на резултата:
По този начин избягваш сравнително тромавото
packet_tuple.0/1
.Можеш да съкратиш полета със същото име като променлива:
Ок би било да преименуваш променливата с
mut
binding. Тоест, това би сработило:Тук също можеш да pattern-match-неш двете части с
Ok((packet, remainder))
. И предвид, че тук просто връщаш грешката ако има такава, можеш да пренапишеш логиката с оператор?
:Вместо
str::from_utf8
, можеш да използваш аналогичнотоString::from_utf8
. ТакаOk
случая ти е идентитет и единствено имаш нужда да override-неш случая, в който имаш грешка: