THRIFT-5855: Add rust fuzzers

Add fuzzers for Rust support, to improve the reliability/robustness of the implementation
diff --git a/lib/rs/test/fuzz/Makefile.am b/lib/rs/test/fuzz/Makefile.am
new file mode 100644
index 0000000..4f49120
--- /dev/null
+++ b/lib/rs/test/fuzz/Makefile.am
@@ -0,0 +1,55 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+THRIFT = $(top_builddir)/compiler/cpp/thrift
+
+# These sed commands are needed to work around the fact that the generator doesn't
+# support the arbitrary crate yet.
+stubs: $(top_builddir)/test/FuzzTest.thrift $(THRIFT)
+	$(THRIFT) -out lib/ --gen rs $(top_builddir)/test/FuzzTest.thrift
+	sed -i 's/thrift::OrderedFloat/ordered_float::OrderedFloat/g' lib/fuzz_test.rs
+	sed -i 's/derive(/derive(arbitrary::Arbitrary, /g' lib/fuzz_test.rs
+
+check: stubs
+	$(CARGO) fmt --all -- --check
+	$(CARGO) clippy --all -- -D warnings
+	$(CARGO) build
+
+clean-local:
+	$(CARGO) clean
+	-$(RM) Cargo.lock
+	-$(RM) -r target/
+	-$(RM) -r corpus/
+	-$(RM) -r artifacts/
+	-$(RM) -r coverage/
+	-$(RM) lib/fuzz_test.rs
+
+distdir:
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+EXTRA_DIST = \
+	Cargo.toml \
+	lib/mod.rs \
+	fuzz_targets/parse_compact.rs \
+	fuzz_targets/parse_binary.rs \
+	fuzz_targets/roundtrip_binary.rs \
+	fuzz_targets/roundtrip_compact.rs \
+	fuzz_targets/structured_roundtrip_compact.rs \
+	fuzz_targets/structured_roundtrip_binary.rs \
+	bin/corpus_generator.rs