tm_language/ser/
mod.rs

1use serde::{Serialize, Serializer};
2use serde::ser::SerializeStruct;
3use crate::{TmCaptures, TmPattern};
4
5impl Serialize for TmCaptures {
6    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
7        // let mut s = serializer.serialize_map(Some(self.inner.len()))?;
8        serializer.collect_map(self.inner.iter())
9    }
10}
11
12impl Serialize for TmPattern {
13    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
14        let mut s = serializer.serialize_struct("TmPattern", 16)?;
15        match self {
16            TmPattern::Include { include } => {
17                s.serialize_field("include", include)?;
18            }
19            TmPattern::Complete { name, comment, begin, begin_captures, end, end_captures, matches, captures, patterns } => {
20                if !comment.is_empty() {
21                    s.serialize_field("comment", comment)?;
22                }
23                s.serialize_field("name", name)?;
24                if !begin.is_empty() {
25                    s.serialize_field("begin", begin)?;
26                    s.serialize_field("beginCaptures", begin_captures)?;
27                }
28                if !end.is_empty() {
29                    s.serialize_field("begin", begin)?;
30                    s.serialize_field("beginCaptures", end_captures)?;
31                }
32                if !matches.is_empty() {
33                    s.serialize_field("match", matches)?;
34                    s.serialize_field("captures", captures)?;
35                }
36                if !patterns.is_empty() {
37                    s.serialize_field("patterns", patterns)?;
38                }
39            }
40        }
41        s.end()
42    }
43}