1use serde::Deserialize;
2
3#[derive(Clone, Debug, Deserialize, PartialEq)]
8pub struct Eagle {
9    pub drawing: Drawing,
10}
11
12#[derive(Clone, Debug, Deserialize, PartialEq)]
13pub struct Drawing {
14    pub schematic: Schematic,
15}
16
17#[derive(Clone, Debug, Deserialize, PartialEq)]
18pub struct VariantDef {
19    pub name: String,
20    pub current: Option<String>,
21}
22
23#[derive(Clone, Debug, Deserialize, PartialEq)]
24pub struct VariantDefs {
25    pub variantdef: Vec<VariantDef>,
26}
27
28#[derive(Clone, Debug, Deserialize, PartialEq)]
29pub struct Schematic {
30    pub parts: Parts,
31    pub attributes: Attributes,
32    pub variantdefs: VariantDefs,
33    pub libraries: Libraries,
34}
35
36#[derive(Clone, Debug, Deserialize, PartialEq)]
37pub struct Libraries {
38    pub library: Vec<Library>,
39}
40
41#[derive(Clone, Debug, Deserialize, PartialEq)]
42pub struct Library {
43    pub name: String,
44    pub devicesets: DeviceSets,
45}
46
47#[derive(Clone, Debug, Deserialize, PartialEq)]
48pub struct DeviceSets {
49    pub deviceset: Vec<DeviceSet>,
50}
51
52#[derive(Clone, Debug, Deserialize, PartialEq)]
53pub struct DeviceSet {
54    pub name: String,
55    pub devices: Devices,
56}
57
58#[derive(Clone, Debug, Deserialize, PartialEq)]
59pub struct Devices {
60    pub device: Vec<Device>,
61}
62
63#[derive(Clone, Debug, Deserialize, PartialEq)]
64pub struct Device {
65    pub name: String,
66    pub technologies: Technologies,
67}
68
69#[derive(Clone, Debug, Deserialize, PartialEq)]
70pub struct Technologies {
71    pub technology: Vec<Technology>,
72}
73
74#[derive(Clone, Debug, Deserialize, PartialEq)]
75pub struct Technology {
76    pub name: String,
77    pub attribute: Option<Vec<Attribute>>,
78}
79
80#[derive(Clone, Debug, Deserialize, PartialEq)]
81pub struct Attributes {
82    pub attribute: Vec<Attribute>,
83}
84
85#[derive(Clone, Debug, Deserialize, PartialEq)]
86pub struct Attribute {
87    pub name: String,
88    pub value: String,
89}
90
91#[derive(Clone, Debug, Deserialize, PartialEq)]
92pub struct Parts {
93    pub part: Vec<Part>,
94}
95
96#[derive(Clone, Debug, Deserialize, PartialEq)]
97pub struct Part {
98    pub name: String,
99    pub deviceset: String,
100    pub technology: Option<String>,
101    pub device: String,
102    #[serde(rename = "variant", default)]
103    pub variants: Vec<Variant>,
104}
105
106#[derive(Clone, Debug, Deserialize, PartialEq)]
107pub struct Variant {
108    pub name: String,
109    pub populate: Option<String>,
110    pub value: Option<String>,
111    pub technology: Option<String>,
112}