1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//! Types for the *m.call.hangup* event. use js_int::UInt; use ruma_events_macros::ruma_event; use serde::{Deserialize, Serialize}; ruma_event! { /// Sent by either party to signal their termination of the call. This can be sent either once /// the call has has been established or before to abort the call. HangupEvent { kind: RoomEvent, event_type: "m.call.hangup", content: { /// The ID of the call this event relates to. pub call_id: String, /// The version of the VoIP specification this messages adheres to. pub version: UInt, /// Optional error reason for the hangup. pub reason: Option<Reason>, }, } } /// A reason for a hangup. /// /// This should not be provided when the user naturally ends or rejects the call. When there was an /// error in the call negotiation, this should be `ice_failed` for when ICE negotiation fails or /// `invite_timeout` for when the other party did not answer in time. #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] pub enum Reason { /// ICE negotiation failure. #[serde(rename = "ice_failed")] IceFailed, /// Party did not answer in time. #[serde(rename = "invite_timeout")] InviteTimeout, /// Additional variants may be added in the future and will not be considered breaking changes /// to ruma-events. #[doc(hidden)] #[serde(skip)] __Nonexhaustive, } impl_enum! { Reason { IceFailed => "ice_failed", InviteTimeout => "invite_timeout", } }