Initial cargo-read-manifest
authorCarl Lerche <me@carllerche.com>
Sat, 8 Mar 2014 01:14:02 +0000 (17:14 -0800)
committerCarl Lerche <me@carllerche.com>
Sat, 8 Mar 2014 01:14:02 +0000 (17:14 -0800)
commands/cargo-read-manifest/main.rs
libs/hammer.rs

index 571174dd085042ba7b4a7299b6d862959fa7444f..4cba6dd37a293dd332002927800f072775569d64 100644 (file)
@@ -1,5 +1,51 @@
 #[crate_id="cargo-read-manifest"];
 
+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<ReadManifestFlags>, c: FlagConfiguration) -> FlagConfiguration {
+    c
+  }
+}
+
 fn main() {
+  let mut decoder = FlagDecoder::new::<ReadManifestFlags>(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::<Manifest>(root.clone());
+  let encoded: ~str = Encoder::str_encode(&manifest);
 
+  println!("{}", encoded);
 }
index 4bfa10d99e36ccdf7cb20098d1a520ba1480feb3..06432c54340c21212c1c64f37881605b41378917 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 4bfa10d99e36ccdf7cb20098d1a520ba1480feb3
+Subproject commit 06432c54340c21212c1c64f37881605b41378917