// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package typedStreamingService

type BoolList []bool
type NumStruct struct {
  Number float64
  BigInt int64
  String string
}
type TypeList []typeobject

type TypedStreamingService interface {
  // inStreamOnly verifies that typed inStreams work properly.
  // numTimes: # of strings client must send
  // numReceived: # of strings received from client
  InStreamOnly(numTimes uint32) stream<string, _> (numReceived uint32 | error)

  // outStreamOnly verifies that typed outStreams work properly.
  // numTimes: # of ints that the client wants back
  // numReceived: # of ints that service tried to send
  OutStreamOnly(numTimes uint32) stream<_, int64> (numSent uint32 | error)

  // bidirBoolListNegationsStream tests that bidirectional streams can send
  // composite types back and forth, as well as modify the data items streamed.
  // numReceived: # of []bool received from client
  BidirBoolListNegationStream() stream<BoolList, BoolList> (numReceived uint32 | error)

  // structValueStream converts a number to a struct based on that number.
  // Ensures that custom-defined types can be sent across the stream.
  // numReceived: # of float64 received from client
  StructValueStream() stream<float64, NumStruct> (numReceived uint32 | error)

  // anyStream tests that typed values can pass through a bidirectional stream.
  // intypes: list of types to be streamed from client
  // outtypes: list of types to be streamed to client
  AnyStream(intypes TypeList) stream<any, any> (outtypes TypeList | error)
}