nvim_api/types/
register_type.rs

1use nvim_types::{self as nvim, conversion::FromObject, serde::Serializer};
2use serde::{ser, Serialize};
3
4#[non_exhaustive]
5#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
6pub enum RegisterType {
7    #[serde(serialize_with = "serialize_blockwise")]
8    BlockwiseVisual(Option<usize>),
9
10    #[serde(rename = "c")]
11    Charwise,
12
13    #[serde(rename = "l")]
14    Linewise,
15
16    #[serde(rename = "")]
17    Guess,
18}
19
20fn serialize_blockwise<S>(
21    width: &Option<usize>,
22    serializer: S,
23) -> Result<S::Ok, S::Error>
24where
25    S: ser::Serializer,
26{
27    serializer.serialize_str(
28        &(match width {
29            Some(n) => format!("b{n}"),
30            None => "b".to_owned(),
31        }),
32    )
33}
34
35impl From<RegisterType> for nvim::String {
36    fn from(reg_type: RegisterType) -> Self {
37        nvim::String::from_object(
38            reg_type
39                .serialize(Serializer::new())
40                .expect("`RegisterType` is serializable"),
41        )
42        .expect("`RegisterType` is serialized into a string")
43    }
44}