move files under a worker dir, change WorkerConnection#readRequest to return a FutureOr<WorkRequest>
diff --git a/lib/bazel_worker.dart b/lib/bazel_worker.dart
index 8d42fb6..0b00408 100644
--- a/lib/bazel_worker.dart
+++ b/lib/bazel_worker.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-export 'src/async_worker_loop.dart';
+export 'src/worker/async_worker_loop.dart';
 export 'src/constants.dart';
 export 'src/message_grouper.dart';
-export 'src/sync_worker_loop.dart';
-export 'src/worker_connection.dart';
-export 'src/worker_loop.dart';
+export 'src/worker/sync_worker_loop.dart';
+export 'src/worker/worker_connection.dart';
+export 'src/worker/worker_loop.dart';
 export 'src/worker_protocol.pb.dart';
diff --git a/lib/src/async_worker_loop.dart b/lib/src/worker/async_worker_loop.dart
similarity index 95%
rename from lib/src/async_worker_loop.dart
rename to lib/src/worker/async_worker_loop.dart
index bf6c893..fa0007b 100644
--- a/lib/src/async_worker_loop.dart
+++ b/lib/src/worker/async_worker_loop.dart
@@ -5,12 +5,12 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'constants.dart';
-import 'async_message_grouper.dart';
-import 'utils.dart';
+import '../constants.dart';
+import '../async_message_grouper.dart';
+import '../utils.dart';
+import '../worker_protocol.pb.dart';
 import 'worker_connection.dart';
 import 'worker_loop.dart';
-import 'worker_protocol.pb.dart';
 
 /// Connection between a worker and input / output.
 abstract class AsyncWorkerConnection implements WorkerConnection {
diff --git a/lib/src/sync_worker_loop.dart b/lib/src/worker/sync_worker_loop.dart
similarity index 95%
rename from lib/src/sync_worker_loop.dart
rename to lib/src/worker/sync_worker_loop.dart
index a3528a5..f0e94c6 100644
--- a/lib/src/sync_worker_loop.dart
+++ b/lib/src/worker/sync_worker_loop.dart
@@ -4,12 +4,12 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'constants.dart';
-import 'sync_message_grouper.dart';
-import 'utils.dart';
+import '../constants.dart';
+import '../sync_message_grouper.dart';
+import '../utils.dart';
+import '../worker_protocol.pb.dart';
 import 'worker_connection.dart';
 import 'worker_loop.dart';
-import 'worker_protocol.pb.dart';
 
 /// Connection between a worker and input / output.
 abstract class SyncWorkerConnection implements WorkerConnection {
diff --git a/lib/src/worker_connection.dart b/lib/src/worker/worker_connection.dart
similarity index 84%
rename from lib/src/worker_connection.dart
rename to lib/src/worker/worker_connection.dart
index c39bc3f..cbe6e3b 100644
--- a/lib/src/worker_connection.dart
+++ b/lib/src/worker/worker_connection.dart
@@ -2,7 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'worker_protocol.pb.dart';
+import 'dart:async';
+
+import '../worker_protocol.pb.dart';
 
 /// Interface for a [WorkerConnection].
 ///
@@ -10,7 +12,7 @@
 abstract class WorkerConnection {
   /// Read a [WorkRequest]. Returns either [Future<WorkRequest>] or
   /// [WorkRequest].
-  dynamic readRequest();
+  FutureOr<WorkRequest> readRequest();
 
   /// Writes a [WorkResponse].
   void writeResponse(WorkResponse response);
diff --git a/lib/src/worker_loop.dart b/lib/src/worker/worker_loop.dart
similarity index 94%
rename from lib/src/worker_loop.dart
rename to lib/src/worker/worker_loop.dart
index 8eb7008..2e4a023 100644
--- a/lib/src/worker_loop.dart
+++ b/lib/src/worker/worker_loop.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'worker_protocol.pb.dart';
+import '../worker_protocol.pb.dart';
 
 /// Interface for a [WorkerLoop].
 ///