use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{IntoOption, Meta, RequestId};
#[cfg(feature = "unstable_cancel_request")]
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
#[schemars(extend("x-side" = "protocol", "x-method" = CANCEL_REQUEST_METHOD_NAME))]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct CancelRequestNotification {
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none", rename = "_meta")]
pub meta: Option<Meta>,
}
#[cfg(feature = "unstable_cancel_request")]
impl CancelRequestNotification {
#[must_use]
pub fn new(request_id: impl Into<RequestId>) -> Self {
Self {
request_id: request_id.into(),
meta: None,
}
}
#[must_use]
pub fn meta(mut self, meta: impl IntoOption<Meta>) -> Self {
self.meta = meta.into_option();
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct GeneralMethodNames {
#[cfg(feature = "unstable_cancel_request")]
pub cancel_request: &'static str,
}
pub const PROTOCOL_LEVEL_METHOD_NAMES: GeneralMethodNames = GeneralMethodNames {
#[cfg(feature = "unstable_cancel_request")]
cancel_request: CANCEL_REQUEST_METHOD_NAME,
};
pub(crate) const CANCEL_REQUEST_METHOD_NAME: &str = "$/cancel_request";
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
#[schemars(inline)]
#[non_exhaustive]
pub enum ProtocolLevelNotification {
#[cfg(feature = "unstable_cancel_request")]
CancelRequestNotification(CancelRequestNotification),
}
impl ProtocolLevelNotification {
#[must_use]
pub fn method(&self) -> &str {
match self {
#[cfg(feature = "unstable_cancel_request")]
Self::CancelRequestNotification(..) => PROTOCOL_LEVEL_METHOD_NAMES.cancel_request,
}
}
}