Skip to main content

kiutils_kicad/
unknown.rs

1use kiutils_sexpr::{Atom, Node, Span as CstSpan};
2use serde_json::Value;
3
4#[derive(Debug, Clone, PartialEq, Eq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct UnknownNode {
7    pub head: Option<String>,
8    pub span: CstSpan,
9    pub node: Node,
10}
11
12impl UnknownNode {
13    pub fn from_node(node: &Node) -> Option<Self> {
14        match node {
15            Node::List { items, span } => {
16                let head = items.first().and_then(|n| match n {
17                    Node::Atom {
18                        atom: Atom::Symbol(s),
19                        ..
20                    } => Some(s.clone()),
21                    _ => None,
22                });
23                Some(Self {
24                    head,
25                    span: *span,
26                    node: node.clone(),
27                })
28            }
29            Node::Atom { span, .. } => Some(Self {
30                head: None,
31                span: *span,
32                node: node.clone(),
33            }),
34        }
35    }
36}
37
38#[derive(Debug, Clone, PartialEq)]
39#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
40pub struct UnknownField {
41    pub key: String,
42    pub value: Value,
43}