html-languageservice 0.12.0

The basics of an HTML language server.
Documentation
use lsp_types::MarkupContent;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct HTMLDataV1 {
    pub version: f32,
    pub tags: Option<Vec<ITagData>>,
    #[serde(rename = "globalAttributes")]
    pub global_attributes: Option<Vec<IAttributeData>>,
    #[serde(rename = "valueSets")]
    pub value_sets: Option<Vec<IValueSet>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct ITagData {
    pub name: String,
    pub description: Option<Description>,
    pub attributes: Vec<IAttributeData>,
    pub references: Option<Vec<IReference>>,
    pub void: Option<bool>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct IAttributeData {
    pub name: String,
    pub description: Option<Description>,
    #[serde(rename = "valueSet")]
    pub value_set: Option<String>,
    pub values: Option<Vec<IValueData>>,
    pub references: Option<Vec<IReference>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct IValueSet {
    pub name: String,
    pub values: Vec<IValueData>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct IValueData {
    pub name: String,
    pub description: Option<Description>,
    pub references: Option<Vec<IReference>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct IReference {
    pub name: String,
    pub url: String,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(untagged)]
pub enum Description {
    String(String),
    MarkupContent(MarkupContent),
}

#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq)]
pub enum MarkupKind {
    #[serde(rename = "plaintext")]
    Plaintext,
    #[serde(rename = "markdown")]
    Markdown,
}