xrl 0.0.1

Xi Rpc Lib - Tokio based implementation of the RPC used in the Xi editor
Documentation
use serde::{Deserialize, Deserializer};

fn _return_true() -> bool {
    true
}

#[derive(Default, Debug, PartialEq, Clone)]
pub struct StyleDef {
    offset: i64,
    length: u64,
    style_id: u64,
}

#[derive(Deserialize)]
struct StyleDefHelper(i64, u64, u64);

impl<'de> Deserialize<'de> for StyleDef {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        Deserialize::deserialize(deserializer).map(|StyleDefHelper(offset, length, style_id)| {
            StyleDef {
                offset: offset,
                length: length,
                style_id: style_id,
            }
        })
    }
}

#[derive(Default, Deserialize, Debug, PartialEq, Clone)]
pub struct Line {
    #[serde(default)]
    pub text: String,
    #[serde(default)]
    pub cursor: Vec<u64>,
    #[serde(default)]
    pub styles: Vec<StyleDef>,
    #[serde(default = "_return_true")]
    #[serde(skip_deserializing)]
    pub is_valid: bool,
}