use crate::proto::User; use crate::room; /// This enumeration is the list of possible control responses from the client /// to the controller. #[derive(Debug, RustcDecodable, RustcEncodable)] pub enum Response { LoginStatusResponse(LoginStatusResponse), RoomJoinResponse(RoomJoinResponse), RoomLeaveResponse(RoomLeaveResponse), RoomListResponse(RoomListResponse), RoomMessageResponse(RoomMessageResponse), RoomUserJoinedResponse(RoomUserJoinedResponse), RoomUserLeftResponse(RoomUserLeftResponse), UserInfoResponse(UserInfoResponse), UserListResponse(UserListResponse), } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct RoomJoinResponse { pub room_name: String, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct RoomLeaveResponse { pub room_name: String, } /// This enumeration is the list of possible login states, and the associated /// information. #[derive(Debug, RustcDecodable, RustcEncodable)] pub enum LoginStatusResponse { /// The login request has been sent to the server, but the response hasn't /// been received yet. Pending { /// The username used to log in. username: String, }, /// Login was successful. Success { /// The username used to log in. username: String, /// The message of the day sent by the server. motd: String, }, /// Login failed. Failure { /// The username used to log in. username: String, /// The reason the server gave for refusing the login request. reason: String, }, } /// This structure contains the list of all visible rooms, and their associated /// data. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct RoomListResponse { /// The list of (room name, room data) pairs. pub rooms: Vec<(String, room::Room)>, } /// This structure contains a message said in a chat room the user is a member /// of. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct RoomMessageResponse { /// The name of the room in which the message was said. pub room_name: String, /// The name of the user who said the message. pub user_name: String, /// The message itself. pub message: String, } /// This struct describes the fact that the given user joined the given room. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct RoomUserJoinedResponse { pub room_name: String, pub user_name: String, } /// This struct describes the fact that the given user left the given room. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct RoomUserLeftResponse { pub room_name: String, pub user_name: String, } /// This struct contains the last known information about a given user. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct UserInfoResponse { pub user_name: String, pub user_info: User, } /// This stuct contains the last known information about every user. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct UserListResponse { pub user_list: Vec<(String, User)>, }