Явор качи първо решение на 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.Можеш да съкратиш полета със същото име като променлива:
Ок би било да преименуваш променливата с
mutbinding. Тоест, това би сработило:Тук също можеш да pattern-match-неш двете части с
Ok((packet, remainder)). И предвид, че тук просто връщаш грешката ако има такава, можеш да пренапишеш логиката с оператор?:Вместо
str::from_utf8, можеш да използваш аналогичнотоString::from_utf8. ТакаOkслучая ти е идентитет и единствено имаш нужда да override-неш случая, в който имаш грешка: