Three files, because there are only three things to do: - Create a data source by implementing `Source`. - If it is endless, use the `EndlessTrait` in your implementation. - Create a readable stream with the `StreamAdapter`.