#[derive(Clone, PartialEq, Eq, Default)]
pub struct AccessToken(String);
impl std::fmt::Debug for AccessToken {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("AccessToken")
            .field("token", &"****")
            .finish()
    }
}
impl AccessToken {
    pub fn new<T: ToString>(token: T) -> Self {
        Self(token.to_string())
    }
}
impl From<String> for AccessToken {
    fn from(s: String) -> Self {
        Self(s)
    }
}
impl From<AccessToken> for String {
    fn from(t: AccessToken) -> Self {
        t.0
    }
}
#[derive(Clone, PartialEq, Debug)]
pub struct ConnectRequest {
    pub request_id: super::RequestId,
    pub protocol_version: String,
    pub node_id: String,
    pub ping_interval: chrono::Duration, pub ping_timeout: chrono::Duration, pub project_uuid: Option<String>,
    pub access_token: Option<AccessToken>,
}
impl Default for ConnectRequest {
    fn default() -> Self {
        Self {
            request_id: 0.into(),
            protocol_version: crate::ISCP_VERSION.to_string(),
            node_id: "".to_string(),
            ping_interval: chrono::Duration::seconds(10),
            ping_timeout: chrono::Duration::seconds(1),
            project_uuid: None,
            access_token: None,
        }
    }
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct ConnectResponse {
    pub request_id: super::RequestId,
    pub protocol_version: String,
    pub result_code: super::ResultCode,
    pub result_string: String,
}
#[derive(Clone, PartialEq, Default, Debug)]
pub struct Disconnect {
    pub result_code: super::ResultCode,
    pub result_string: String,
}