diff --git a/commands/cargo-read-manifest/main.rs b/commands/cargo-read-manifest/main.rs index 571174dd0..4cba6dd37 100644 --- a/commands/cargo-read-manifest/main.rs +++ b/commands/cargo-read-manifest/main.rs @@ -1,5 +1,51 @@ #[crate_id="cargo-read-manifest"]; -fn main() { +extern crate hammer; +extern crate serialize; +extern crate toml; +extern crate semver; +use hammer::{FlagDecoder,FlagConfig,FlagConfiguration}; +use serialize::{Decoder,Decodable}; +use serialize::json::Encoder; +use toml::from_toml; +use semver::Version; + +#[deriving(Decodable,Encodable)] +struct Manifest { + project: ~Project +} + +#[deriving(Decodable,Encodable)] +struct Project { + name: ~str, + version: ~str, + authors: ~[~str] +} + +#[deriving(Decodable)] +struct ReadManifestFlags { + manifest_path: ~str +} + +impl FlagConfig for ReadManifestFlags { + fn config(_: Option, c: FlagConfiguration) -> FlagConfiguration { + c + } +} + +fn main() { + let mut decoder = FlagDecoder::new::(std::os::args().tail()); + let flags: ReadManifestFlags = Decodable::decode(&mut decoder); + + if decoder.error.is_some() { + fail!("Error: {}", decoder.error.unwrap()); + } + + let root = toml::parse_from_file(flags.manifest_path).unwrap(); + + let manifest = from_toml::(root.clone()); + let encoded: ~str = Encoder::str_encode(&manifest); + + println!("{}", encoded); } diff --git a/libs/hammer.rs b/libs/hammer.rs index 4bfa10d99..06432c543 160000 --- a/libs/hammer.rs +++ b/libs/hammer.rs @@ -1 +1 @@ -Subproject commit 4bfa10d99e36ccdf7cb20098d1a520ba1480feb3 +Subproject commit 06432c54340c21212c1c64f37881605b41378917