Marshaling and unmarshaling data
The HTTP protocol is primarily used to transfer information between remote systems. Data needs to be serialized into bytes to be able to be transferred from one point to another; however, manipulating bytes in your application is probably challenging and error-prone. The regular approach to this problem is to create classes in your code that represent the data you are sending or receiving. In addition, you could develop complementary code that would contain the logic to marshall your classes into a byte stream, and of course, unmarshal the incoming byte stream into your classes.
Akka HTTP gets APIs to do the marshaling and unmarshaling automatically as long as you provide the logic to do it. Depending on your use case, you might just want to marshal a part of your HTTP request or response. This is why Akka HTTP provides different levels for marshalers. If you just need to customize the serialization of the HTTP entity (basically the content and content type...