pw_rpc: BaseServerWriter class

BaseServerWriter handles streaming responses from a server. The
pw_rpc server implementation must extend BaseServerWriter to provide a
user-facing method for actually sending responses.

Change-Id: I80e73ff5847ff5c843e496ada08245db8049afb5
diff --git a/pw_rpc/BUILD.gn b/pw_rpc/BUILD.gn
index 37aeba1..99ef678 100644
--- a/pw_rpc/BUILD.gn
+++ b/pw_rpc/BUILD.gn
@@ -52,6 +52,8 @@
       "public/pw_rpc/server_context.h",
     ]
     sources = [
+      "base_server_writer.cc",
+      "public/pw_rpc/internal/base_server_writer.h",
       "public/pw_rpc/internal/service.h",
       "public/pw_rpc/internal/service_registry.h",
       "server.cc",
@@ -83,6 +85,15 @@
   visibility = [ ":*" ]
 }
 
+source_set("test_utils") {
+  public = [ "pw_rpc_private/test_utils.h" ]
+  public_deps = [
+    ":common",
+    dir_pw_span,
+  ]
+  visibility = [ ":*" ]
+}
+
 pw_proto_library("protos") {
   sources = [ "pw_rpc_protos/packet.proto" ]
 }
@@ -93,6 +104,7 @@
 
 pw_test_group("tests") {
   tests = [
+    ":base_server_writer_test",
     ":packet_test",
     ":server_test",
   ]
@@ -116,6 +128,14 @@
   visibility = [ ":test_server" ]
 }
 
+pw_test("base_server_writer_test") {
+  deps = [
+    ":test_server",
+    ":test_utils",
+  ]
+  sources = [ "base_server_writer_test.cc" ]
+}
+
 pw_test("packet_test") {
   deps = [
     ":common",
@@ -128,6 +148,7 @@
   deps = [
     ":protos_pwpb",
     ":test_server",
+    ":test_utils",
     dir_pw_assert,
   ]
   sources = [ "server_test.cc" ]