diff --git a/Cargo.lock b/Cargo.lock index b7de839..1473415 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -238,6 +238,10 @@ dependencies = [ [[package]] name = "dinopkg-package-json" version = "0.1.0" +dependencies = [ + "serde", + "serde_json", +] [[package]] name = "encoding_rs" diff --git a/crates/dinopkg-package-json/Cargo.toml b/crates/dinopkg-package-json/Cargo.toml index c8d90c8..16da509 100644 --- a/crates/dinopkg-package-json/Cargo.toml +++ b/crates/dinopkg-package-json/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" edition = "2021" [dependencies] +serde = { version = "1.0.204", features = ["derive"] } +serde_json = "1.0.120" diff --git a/crates/dinopkg-package-json/src/main.rs b/crates/dinopkg-package-json/src/main.rs index e7a11a9..18b8ed6 100644 --- a/crates/dinopkg-package-json/src/main.rs +++ b/crates/dinopkg-package-json/src/main.rs @@ -1,3 +1,24 @@ -fn main() { - println!("Hello, world!"); +use std::collections::HashMap; + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PackageJson { + pub name: String, + pub version: String, + pub description: Option, + pub main: Option, + pub scripts: Option, + pub dependencies: Option, + pub dev_dependencies: Option, +} + +pub type Scripts = HashMap; +pub type Dependencies = HashMap; + +impl PackageJson { + pub fn parse(json: &str) -> Result { + serde_json::from_str(json) + } }