use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use super::common::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Collection {
pub key: String,
pub version: u64,
pub library: Library,
#[serde(default)]
pub links: HashMap<String, LinkEntry>,
#[serde(default)]
pub meta: CollectionMeta,
pub data: CollectionData,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CollectionMeta {
#[serde(rename = "numCollections")]
pub num_collections: Option<u64>,
#[serde(rename = "numItems")]
pub num_items: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectionData {
pub key: String,
pub version: u64,
pub name: String,
#[serde(rename = "parentCollection")]
pub parent_collection: serde_json::Value,
pub relations: Option<serde_json::Value>,
}
impl CollectionData {
pub fn parent_key(&self) -> Option<&str> {
self.parent_collection.as_str()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_deserialize_collection_fixture() {
let json = include_str!("../../tests/fixtures/collection.json");
let coll: Collection = serde_json::from_str(json).unwrap();
assert_eq!(coll.key, "QVK3WHF2");
assert_eq!(coll.data.name, "Variational Calculus");
assert_eq!(coll.data.parent_key(), Some("BXHE5XUF"));
assert_eq!(coll.meta.num_items, Some(1));
}
}