veyron2/services/mounttable: Split types into separate pkg

Split the mounttable interface into two separate packages: one for the
interface itself, and one for the types.

This will allow implementations to use the generated types without
depending on the generated stubs.

Change-Id: I84430a464b20097b997c92f9cd05cdc1cb7ee62e
diff --git a/services/mgmt/logreader/impl/logdir_invoker.go b/services/mgmt/logreader/impl/logdir_invoker.go
index de226cc..ae1d44d 100644
--- a/services/mgmt/logreader/impl/logdir_invoker.go
+++ b/services/mgmt/logreader/impl/logdir_invoker.go
@@ -8,6 +8,7 @@
 
 	"veyron2/ipc"
 	"veyron2/services/mounttable"
+	"veyron2/services/mounttable/types"
 	"veyron2/vlog"
 )
 
@@ -42,7 +43,7 @@
 // globStep applies a glob recursively.
 func (i *logDirectoryInvoker) globStep(name string, g *glob.Glob, isDir bool, stream mounttable.GlobbableServiceGlobStream) error {
 	if g.Len() == 0 && !isDir {
-		if err := stream.SendStream().Send(mounttable.MountEntry{Name: name}); err != nil {
+		if err := stream.SendStream().Send(types.MountEntry{Name: name}); err != nil {
 			return err
 		}
 	}
diff --git a/services/mounttable/lib/mounttable.go b/services/mounttable/lib/mounttable.go
index 26b52ca..2a57fdc 100644
--- a/services/mounttable/lib/mounttable.go
+++ b/services/mounttable/lib/mounttable.go
@@ -17,6 +17,7 @@
 	"veyron2/rt"
 	"veyron2/security"
 	"veyron2/services/mounttable"
+	"veyron2/services/mounttable/types"
 	"veyron2/verror"
 	"veyron2/vlog"
 )
@@ -205,7 +206,7 @@
 
 // ResolveStep returns the next server in a resolution, the name remaining below that server,
 // and whether or not that server is another mount table.
-func (ms *mountContext) ResolveStep(context ipc.ServerContext) (servers []mounttable.MountedServer, suffix string, err error) {
+func (ms *mountContext) ResolveStep(context ipc.ServerContext) (servers []types.MountedServer, suffix string, err error) {
 	vlog.VI(2).Infof("ResolveStep %q", ms.name)
 	mt := ms.mt
 	// TODO(caprita): we need to grab a write lock because walk may
@@ -337,7 +338,7 @@
 			n.removeUseless()
 			return
 		}
-		sender.Send(mounttable.MountEntry{Name: name, Servers: m.servers.copyToSlice()})
+		sender.Send(types.MountEntry{Name: name, Servers: m.servers.copyToSlice()})
 		return
 	}
 
@@ -347,7 +348,7 @@
 			n.removeUseless()
 			return
 		}
-		sender.Send(mounttable.MountEntry{Name: name})
+		sender.Send(types.MountEntry{Name: name})
 	}
 
 	if pattern.Finished() {
diff --git a/services/mounttable/lib/neighborhood.go b/services/mounttable/lib/neighborhood.go
index 33485c5..738c058 100644
--- a/services/mounttable/lib/neighborhood.go
+++ b/services/mounttable/lib/neighborhood.go
@@ -14,6 +14,7 @@
 	"veyron2/rt"
 	"veyron2/security"
 	"veyron2/services/mounttable"
+	"veyron2/services/mounttable/types"
 	"veyron2/vlog"
 
 	"code.google.com/p/mdns"
@@ -149,8 +150,8 @@
 }
 
 // neighbor returns the MountedServers for a particular neighbor.
-func (nh *neighborhood) neighbor(instance string) []mounttable.MountedServer {
-	var reply []mounttable.MountedServer
+func (nh *neighborhood) neighbor(instance string) []types.MountedServer {
+	var reply []types.MountedServer
 	si := nh.mdns.ResolveInstance(instance, "veyron")
 
 	// Use a map to dedup any addresses seen
@@ -167,7 +168,7 @@
 		}
 	}
 	for addr, ttl := range addrMap {
-		reply = append(reply, mounttable.MountedServer{addr, ttl})
+		reply = append(reply, types.MountedServer{addr, ttl})
 	}
 
 	if reply != nil {
@@ -183,15 +184,15 @@
 		for _, ip := range ips {
 			addr := net.JoinHostPort(ip.String(), strconv.Itoa(int(rr.Port)))
 			ep := naming.FormatEndpoint("tcp", addr)
-			reply = append(reply, mounttable.MountedServer{naming.JoinAddressName(ep, ""), ttl})
+			reply = append(reply, types.MountedServer{naming.JoinAddressName(ep, ""), ttl})
 		}
 	}
 	return reply
 }
 
 // neighbors returns all neighbors and their MountedServer structs.
-func (nh *neighborhood) neighbors() map[string][]mounttable.MountedServer {
-	neighbors := make(map[string][]mounttable.MountedServer, 0)
+func (nh *neighborhood) neighbors() map[string][]types.MountedServer {
+	neighbors := make(map[string][]types.MountedServer, 0)
 	members := nh.mdns.ServiceDiscovery("veyron")
 	for _, m := range members {
 		if neighbor := nh.neighbor(m.Name); neighbor != nil {
@@ -203,7 +204,7 @@
 }
 
 // ResolveStep implements ResolveStep
-func (ns *neighborhoodService) ResolveStep(_ ipc.ServerContext) (servers []mounttable.MountedServer, suffix string, err error) {
+func (ns *neighborhoodService) ResolveStep(_ ipc.ServerContext) (servers []types.MountedServer, suffix string, err error) {
 	nh := ns.nh
 	vlog.VI(2).Infof("ResolveStep %v\n", ns.elems)
 	if len(ns.elems) == 0 {
@@ -246,7 +247,7 @@
 			if ok, _ := g.MatchInitialSegment(k); !ok {
 				continue
 			}
-			if err := sender.Send(mounttable.MountEntry{Name: k, Servers: n}); err != nil {
+			if err := sender.Send(types.MountEntry{Name: k, Servers: n}); err != nil {
 				return err
 			}
 		}
@@ -256,7 +257,7 @@
 		if neighbor == nil {
 			return naming.ErrNoSuchName
 		}
-		return sender.Send(mounttable.MountEntry{Name: "", Servers: neighbor})
+		return sender.Send(types.MountEntry{Name: "", Servers: neighbor})
 	default:
 		return naming.ErrNoSuchName
 	}
diff --git a/services/mounttable/lib/serverlist.go b/services/mounttable/lib/serverlist.go
index d427456..2ba49f2 100644
--- a/services/mounttable/lib/serverlist.go
+++ b/services/mounttable/lib/serverlist.go
@@ -5,7 +5,7 @@
 	"sync"
 	"time"
 
-	"veyron2/services/mounttable"
+	"veyron2/services/mounttable/types"
 )
 
 type serverListClock interface {
@@ -110,15 +110,15 @@
 }
 
 // copyToSlice returns the contents of the list as a slice of MountedServer.
-func (sl *serverList) copyToSlice() []mounttable.MountedServer {
+func (sl *serverList) copyToSlice() []types.MountedServer {
 	sl.Lock()
 	defer sl.Unlock()
-	var slice []mounttable.MountedServer
+	var slice []types.MountedServer
 	now := slc.now()
 	for e := sl.l.Front(); e != nil; e = e.Next() {
 		s := e.Value.(*server)
 		ttl := uint32(s.expires.Sub(now).Seconds())
-		ms := mounttable.MountedServer{Server: s.oa, TTL: ttl}
+		ms := types.MountedServer{Server: s.oa, TTL: ttl}
 		slice = append(slice, ms)
 	}
 	return slice
diff --git a/services/store/server/object.go b/services/store/server/object.go
index a8906d6..f5bef59 100644
--- a/services/store/server/object.go
+++ b/services/store/server/object.go
@@ -9,6 +9,7 @@
 	"veyron2/ipc"
 	"veyron2/query"
 	"veyron2/services/mounttable"
+	"veyron2/services/mounttable/types"
 	"veyron2/services/store"
 	"veyron2/services/watch"
 	"veyron2/storage"
@@ -140,12 +141,12 @@
 
 type globStreamSenderAdapter struct {
 	stream interface {
-		Send(entry mounttable.MountEntry) error
+		Send(entry types.MountEntry) error
 	}
 }
 
 func (a *globStreamSenderAdapter) Send(item string) error {
-	return a.stream.Send(mounttable.MountEntry{Name: item})
+	return a.stream.Send(types.MountEntry{Name: item})
 }
 
 type globStreamAdapter struct {
diff --git a/services/wsprd/lib/remove_this.go b/services/wsprd/lib/remove_this.go
index 266ca2b..6368202 100644
--- a/services/wsprd/lib/remove_this.go
+++ b/services/wsprd/lib/remove_this.go
@@ -2,7 +2,7 @@
 
 import (
 	rps "veyron/examples/rockpaperscissors"
-	"veyron2/services/mounttable"
+	mttypes "veyron2/services/mounttable/types"
 	"veyron2/services/store"
 	"veyron2/services/watch"
 	"veyron2/storage"
@@ -10,7 +10,7 @@
 )
 
 func init() {
-	vom.Register(mounttable.MountEntry{})
+	vom.Register(mttypes.MountEntry{})
 	vom.Register(storage.Entry{})
 	vom.Register(storage.Stat{})
 	vom.Register(store.NestedResult(0))
diff --git a/tools/mounttable/impl/impl_test.go b/tools/mounttable/impl/impl_test.go
index 62e3d8a..2f2ec09 100644
--- a/tools/mounttable/impl/impl_test.go
+++ b/tools/mounttable/impl/impl_test.go
@@ -13,6 +13,7 @@
 	"veyron2/rt"
 	"veyron2/security"
 	"veyron2/services/mounttable"
+	"veyron2/services/mounttable/types"
 	"veyron2/vlog"
 )
 
@@ -23,8 +24,8 @@
 func (s *server) Glob(_ ipc.ServerContext, pattern string, stream mounttable.GlobbableServiceGlobStream) error {
 	vlog.VI(2).Infof("Glob() was called. suffix=%v pattern=%q", s.suffix, pattern)
 	sender := stream.SendStream()
-	sender.Send(mounttable.MountEntry{"name1", []mounttable.MountedServer{{"server1", 123}}})
-	sender.Send(mounttable.MountEntry{"name2", []mounttable.MountedServer{{"server2", 456}, {"server3", 789}}})
+	sender.Send(types.MountEntry{"name1", []types.MountedServer{{"server1", 123}}})
+	sender.Send(types.MountEntry{"name2", []types.MountedServer{{"server2", 456}, {"server3", 789}}})
 	return nil
 }
 
@@ -38,9 +39,9 @@
 	return nil
 }
 
-func (s *server) ResolveStep(ipc.ServerContext) (servers []mounttable.MountedServer, suffix string, err error) {
+func (s *server) ResolveStep(ipc.ServerContext) (servers []types.MountedServer, suffix string, err error) {
 	vlog.VI(2).Infof("ResolveStep() was called. suffix=%v", s.suffix)
-	servers = []mounttable.MountedServer{{"server1", 123}}
+	servers = []types.MountedServer{{"server1", 123}}
 	suffix = s.suffix
 	return
 }
diff --git a/tools/vrpc/impl/impl.go b/tools/vrpc/impl/impl.go
index 07330eb..ffd6dd9 100644
--- a/tools/vrpc/impl/impl.go
+++ b/tools/vrpc/impl/impl.go
@@ -19,7 +19,7 @@
 
 	idl_binary "veyron2/services/mgmt/binary"
 	idl_node "veyron2/services/mgmt/node"
-	idl_mounttable "veyron2/services/mounttable"
+	idl_mounttable_types "veyron2/services/mounttable/types"
 )
 
 const serverDesc = `
@@ -131,9 +131,9 @@
 	vom.Register(x2)
 	var x3 idl_binary.Description
 	vom.Register(x3)
-	var x4 idl_mounttable.MountedServer
+	var x4 idl_mounttable_types.MountedServer
 	vom.Register(x4)
-	var x5 idl_mounttable.MountEntry
+	var x5 idl_mounttable_types.MountEntry
 	vom.Register(x5)
 
 	// Decode the inputs from vomJSON-formatted command-line arguments.