nvim_api/types/
register_type.rs1use 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}