use Result chains instead of middleware