use nvim_types::{
conversion::{self, FromObject},
serde::Deserializer,
Object,
};
use serde::Deserialize;
use super::ClientInfos;
use crate::Buffer;
#[non_exhaustive]
#[derive(Clone, Debug, Eq, PartialEq, Deserialize)]
pub struct ChannelInfos {
pub argv: Option<Vec<String>>,
pub buffer: Option<Buffer>,
pub client: Option<ClientInfos>,
pub id: u32,
pub mode: ChannelMode,
pub pty: Option<String>,
pub stream: ChannelStream,
}
#[non_exhaustive]
#[derive(Clone, Debug, Eq, PartialEq, Hash, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ChannelStream {
Job,
Socket,
StdErr,
StdIo,
}
#[non_exhaustive]
#[derive(Clone, Debug, Eq, PartialEq, Hash, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ChannelMode {
Bytes,
Rpc,
Terminal,
}
impl FromObject for ChannelInfos {
fn from_object(obj: Object) -> Result<Self, conversion::Error> {
Self::deserialize(Deserializer::new(obj)).map_err(Into::into)
}
}