Good choice. 

Assuming that you want to create an example program, and not a `rsync` client that is compatible with existing clients, you can follow this simplified plan:

1. Read about the theory behind `rsync` algorithm, for example, at https://www.cs.tufts.edu/~nr/rsync.html 
2. Write the module that computes the per-block fingerprint, in rust, and demonstrate to yourself that it works, by writing tests on a fixed data.
3. Write the module that computes the fingerprint for all blocks on a given file. Make sure that it works well by writing an automated test on an example data.
4. Read about one of the common networking protocols, e.g. ZeroMQ, from https://zguide.zeromq.org/docs/chapter1/
5. Write an example client and server, where the client can connect to the server and send an example message. Demonstrate to yourself that it works by writing a script that will start the server, start the client, have the client to connect to the server and send a message, and finally, shut down the client and server.
6. Extend the client with the modules written previously, so that the message sent are the `rsync` file fingerprints, rather than the example message. At this point, it will be enough to test that the message received by the server is the same that has been sent by the client. 
7. Extend the server to compute the fingerprints on the file that it has, AND compare it with the fingerprints received from the client. 

This is not a complete plan, but from here on the plan should be simple to continue: write a small additional bit of functionality, and add a test. 

Please let me know if you need help with more steps or with any of the particular steps.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence