use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct NotebookMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub kernelspec: Option<KernelSpec>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_info: Option<LanguageInfo>,
#[serde(flatten)]
pub extra: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct KernelSpec {
pub display_name: String,
pub language: String,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct LanguageInfo {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub codemirror_mode: Option<CodemirrorMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_extension: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mimetype: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nbconvert_exporter: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pygments_lexer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CodemirrorMode {
Simple(String),
Object {
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
version: Option<u32>,
},
}