vmgstool/
vmgs_json.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Schema definitions for JSON files generated by HvGuestState from a VMGSv1 file
5
6use serde::Deserialize;
7use serde::Serialize;
8use std::collections::HashMap;
9
10pub const BIOS_LOADER_DEVICE_ID: &str = "ac6b8dc1-3257-4a70-b1b2-a9c9215659ad";
11
12#[derive(Serialize, Deserialize)]
13#[serde(rename_all = "PascalCase")]
14pub struct Version {
15    pub major: u32,
16    pub minor: u32,
17}
18
19#[derive(Serialize, Deserialize)]
20#[serde(rename_all = "PascalCase")]
21pub struct Device {
22    pub version: Version,
23    pub r#type: String,
24    pub states: HashMap<String, State>,
25}
26
27#[derive(Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum State {
30    #[serde(rename_all = "PascalCase")]
31    Nvram {
32        vendors: HashMap<String, NvramVendor>,
33        last_update_time: String,
34    },
35    Other(serde_json::Value),
36}
37
38#[derive(Serialize, Deserialize)]
39#[serde(rename_all = "PascalCase")]
40pub struct NvramVendor {
41    pub variables: HashMap<String, NvramVariable>,
42}
43
44#[derive(Serialize, Deserialize)]
45#[serde(rename_all = "PascalCase")]
46pub struct NvramVariable {
47    pub attributes: u32,
48    pub data: Vec<u8>,
49}
50
51#[derive(Serialize, Deserialize)]
52#[serde(rename_all = "PascalCase")]
53pub struct RuntimeState {
54    pub version: Version,
55    pub devices: HashMap<String, Device>,
56}