hyperbahn/hyperbahn.thrift (29 lines of code) (raw):

exception NoPeersAvailable { 1: required string message 2: required string serviceName } exception InvalidServiceName { 1: required string message 2: required string serviceName } struct DiscoveryQuery { 1: required string serviceName } union IpAddress { 1: i32 ipv4 } struct ServicePeer { 1: required IpAddress ip 2: required i32 port } struct DiscoveryResult { 1: required list<ServicePeer> peers } service Hyperbahn { DiscoveryResult discover( 1: required DiscoveryQuery query ) throws ( 1: NoPeersAvailable noPeersAvailable 2: InvalidServiceName invalidServiceName ) }