syntax = "proto3";

package fuzztest.internal;

service MiniBlogger {
  // Register a user.
  rpc RegisterUser(RegisterUserRequest) returns (RegisterUserResponse);
  // Log in a user and get a session id.
  rpc LogInUser(LogInUserRequest) returns (LogInUserResponse);
  // Get a user's posts by session id.
  rpc GetUserPosts(GetUserPostsRequest) returns (GetUserPostsResponse);
  // Log out the user (invaliding the session id).
  rpc LogOutUser(LogOutUserRequest) returns (LogOutUserResponse);
}

message RegisterUserRequest {
  string user_name = 1;
  string email = 2;
  string password = 3;
}

message RegisterUserResponse {
  bool success = 1;
}

message LogInUserRequest {
  string name = 1;
  string password = 2;
}

message LogInUserResponse {
  bool success = 1;
  // A unique id for the user logging in session.
  int64 session_id = 2;
}

enum SortingOrder {
  ASCENDING = 0;
  DESCENDING = 1;
}

enum SortedBy {
  DATE = 0;
  POPULARITY = 1;
}

// For testing only.
message GetUserPostsOptionsWithDifferentFieldNames {
  SortingOrder ordering = 1;
}

message GetUserPostsOptions {
  SortingOrder order = 1;
  SortedBy sort_by = 2;
}

message GetUserPostsRequest {
  int64 session_id = 1;
  int32 max_posts = 2;  // Maximum number of posts returned.
  GetUserPostsOptions options = 3;
}

message GetUserPostsResponse {
  repeated string posts = 1;
}

// For testing dependency established at inner fields.
message LogOutInfo {
  oneof log_out_info {
    SessionInfo session_info = 1;
    int64 session_id = 2;
  }
}

message SessionInfo {
  int64 session_id = 1;
}

message LogOutUserRequest {
  LogOutInfo log_out_info = 1;
}

message LogOutUserResponse {
  bool success = 1;
}

// This is only for testing that the util of collecting all fields in a message
// won't break with recursive messages.
message RecursiveNode {
  int64 value = 1;
  repeated RecursiveNode children = 2;
}

// For testing only.
message OneOfMessage {
  oneof oneof1 {
    DummyMessage oneof1_field1 = 1;
    int64 oneof1_field2 = 2;
  }
  oneof oneof2 {
    DummyMessage oneof2_field1 = 3;
    int64 oneof2_field2 = 4;
  }
}

message DummyMessage {
  int64 v1 = 1;
  int64 v2 = 2;
}

message InnerRepeated {
  int64 field2 = 1;
}

message MessageWithSingleInnerRepeated {
  InnerRepeated repeated_msg_field = 1;
}

message MessageContainingRepeatedFields {
  repeated int64 field = 1;
  repeated InnerRepeated repeated_msg_field = 2;
}

message MessageNotContainingRepeatedFields {
  int64 field = 1;
  int64 field2 = 2;
}
