zebra/tower-batch/src
Henry de Valence 0586da7167 Revert #500 (generic errors in tower-batch).
Unfortunately, since the Batch wrapper was changed to have a generic error
type, when wrapping it in another Service, nothing constrains the error type,
so we have to specify it explicitly to avoid an inference hole.  This is pretty
unergonomic -- from the compiler error message it's very unintuitive that the
right fix is to change `Batch::new` to `Batch::<_, _, SomeError>::new`.

The options are:

1. roll back the changes that make the error type generic, so that the error
   type is a concrete type;

2. keep the error type generic but hardcode the error in the default
   constructor and add an additional code path that allows overriding the
   error.

However, there's a further issue with generic errors: the error type must be
Clone.  This problem comes from the fact that there can be multiple Batch
handles that have to share access to errors generated by the inner Batch
worker, so there's not a way to work around this.  However, almost all error
types aren't Clone, so there are fairly few error types that we would be
swapping in.

This suggests that in case (2) we would be maintaining extra code to allow
generic errors, but with restrictive enough generic bounds to make it
impractical to use generic error types.  For this reason I think that (1) is a
better option.
2020-07-22 14:29:55 -04:00
..
error.rs Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00
future.rs Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00
layer.rs Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00
lib.rs Fix typos 2020-07-07 11:13:49 -07:00
message.rs Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00
service.rs Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00
worker.rs Revert #500 (generic errors in tower-batch). 2020-07-22 14:29:55 -04:00