initial commands
This commit is contained in:
commit
6044f30bd9
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
/test
|
766
Cargo.lock
generated
Normal file
766
Cargo.lock
generated
Normal file
|
@ -0,0 +1,766 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ansi_term"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.72"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
|
||||
dependencies = [
|
||||
"jobserver",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "chrono"
|
||||
version = "0.4.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
"time",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "2.33.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
|
||||
dependencies = [
|
||||
"ansi_term 0.11.0",
|
||||
"atty",
|
||||
"bitflags",
|
||||
"strsim",
|
||||
"textwrap",
|
||||
"unicode-width",
|
||||
"vec_map",
|
||||
"yaml-rust 0.3.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clipboard-win"
|
||||
version = "4.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3db8340083d28acb43451166543b98c838299b7e0863621be53a338adceea0ed"
|
||||
dependencies = [
|
||||
"error-code",
|
||||
"str-buf",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs"
|
||||
version = "4.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
|
||||
dependencies = [
|
||||
"dirs-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-next"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"dirs-sys-next",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-sys"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"redox_users",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-sys-next"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"redox_users",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dtoa"
|
||||
version = "0.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
|
||||
|
||||
[[package]]
|
||||
name = "dzp"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ansi_term 0.12.1",
|
||||
"clap",
|
||||
"dirs",
|
||||
"git2",
|
||||
"lazer",
|
||||
"license",
|
||||
"reduce",
|
||||
"rustyline",
|
||||
"semver",
|
||||
"serde",
|
||||
"serde_yaml",
|
||||
"url",
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "endian-type"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
|
||||
|
||||
[[package]]
|
||||
name = "error-code"
|
||||
version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5115567ac25674e0043e472be13d14e537f37ea8aa4bdc4aef0c89add1db1ff"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"str-buf",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fd-lock"
|
||||
version = "3.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8806dd91a06a7a403a8e596f9bfbfb34e469efbc363fc9c9713e79e26472e36"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "form_urlencoded"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
|
||||
dependencies = [
|
||||
"matches",
|
||||
"percent-encoding",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "git2"
|
||||
version = "0.13.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "845e007a28f1fcac035715988a234e8ec5458fd825b20a20c7dec74237ef341f"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"libc",
|
||||
"libgit2-sys",
|
||||
"log",
|
||||
"openssl-probe",
|
||||
"openssl-sys",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
|
||||
dependencies = [
|
||||
"matches",
|
||||
"unicode-bidi",
|
||||
"unicode-normalization",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jobserver"
|
||||
version = "0.1.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazer"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3383f4c9bd586ccf2e2b12ed242952d818af999ad0168402f718a4cc8ae2df9f"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.107"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219"
|
||||
|
||||
[[package]]
|
||||
name = "libgit2-sys"
|
||||
version = "0.12.25+1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f68169ef08d6519b2fe133ecc637408d933c0174b23b80bb2f79828966fbaab"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"libssh2-sys",
|
||||
"libz-sys",
|
||||
"openssl-sys",
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libssh2-sys"
|
||||
version = "0.2.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"libz-sys",
|
||||
"openssl-sys",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libz-sys"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "license"
|
||||
version = "1.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7cd915cfc01b6d1df117c5118ffeb5daaed908dd6d54ef2ee6ac40143c191d20"
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matches"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nibble_vec"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
|
||||
dependencies = [
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.22.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3bb9a13fa32bc5aeb64150cd3f32d6cf4c748f8f8a417cce5d2eb976a8370ba"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"memoffset",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-probe"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.71"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7df13d165e607909b363a4757a6f133f8a818a74e9d3a98d09c6128e15fa4c73"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.32"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "radix_trie"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
|
||||
dependencies = [
|
||||
"endian-type",
|
||||
"nibble_vec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_users"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"redox_syscall",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reduce"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "16d2dc47b68ac15ea328cd7ebe01d7d512ed29787f7d534ad2a3c341328b35d7"
|
||||
|
||||
[[package]]
|
||||
name = "rustyline"
|
||||
version = "9.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "790487c3881a63489ae77126f57048b42d62d3b2bafbf37453ea19eedb6340d6"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cfg-if",
|
||||
"clipboard-win",
|
||||
"dirs-next",
|
||||
"fd-lock",
|
||||
"libc",
|
||||
"log",
|
||||
"memchr",
|
||||
"nix",
|
||||
"radix_trie",
|
||||
"scopeguard",
|
||||
"smallvec",
|
||||
"unicode-segmentation",
|
||||
"unicode-width",
|
||||
"utf8parse",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "same-file"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.130"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.130"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_yaml"
|
||||
version = "0.8.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8c608a35705a5d3cdc9fbe403147647ff34b921f8e833e49306df898f9b20af"
|
||||
dependencies = [
|
||||
"dtoa",
|
||||
"indexmap",
|
||||
"serde",
|
||||
"yaml-rust 0.4.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
|
||||
|
||||
[[package]]
|
||||
name = "str-buf"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.81"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "textwrap"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||
dependencies = [
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tinyvec"
|
||||
version = "1.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
|
||||
dependencies = [
|
||||
"tinyvec_macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tinyvec_macros"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-bidi"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-normalization"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
|
||||
dependencies = [
|
||||
"tinyvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-segmentation"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
||||
|
||||
[[package]]
|
||||
name = "url"
|
||||
version = "2.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
|
||||
dependencies = [
|
||||
"form_urlencoded",
|
||||
"idna",
|
||||
"matches",
|
||||
"percent-encoding",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "utf8parse"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "vec_map"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
|
||||
|
||||
[[package]]
|
||||
name = "walkdir"
|
||||
version = "2.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
|
||||
dependencies = [
|
||||
"same-file",
|
||||
"winapi",
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.10.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "yaml-rust"
|
||||
version = "0.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992"
|
||||
|
||||
[[package]]
|
||||
name = "yaml-rust"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||
dependencies = [
|
||||
"linked-hash-map",
|
||||
]
|
21
Cargo.toml
Normal file
21
Cargo.toml
Normal file
|
@ -0,0 +1,21 @@
|
|||
[package]
|
||||
name = "dzp"
|
||||
version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
ansi_term = "0.12.1"
|
||||
clap = { version = "2.33.0", features = ["yaml"] }
|
||||
dirs = "4.0.0"
|
||||
git2 = "0.13.24"
|
||||
lazer = "0.3.1"
|
||||
license = "<=1.1.10"
|
||||
reduce = "0.1.4"
|
||||
rustyline = "9.0.0"
|
||||
semver = { version = "1.0", features = ["serde"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_yaml = "0.8.20"
|
||||
url = { version = "2.2.2", features = ["serde"] }
|
||||
walkdir = "2"
|
43
src/cli.yml
Normal file
43
src/cli.yml
Normal file
|
@ -0,0 +1,43 @@
|
|||
name: dzp
|
||||
version: "0.1.0"
|
||||
author: Skye P. <spiralixp@gmail.com>
|
||||
about: DeniZip, the Denizen Project Manager
|
||||
subcommands:
|
||||
- new:
|
||||
about: Creates a new Denizen project
|
||||
version: "0.1.0"
|
||||
author: Skye P. <spiralixp@gmail.com>
|
||||
args:
|
||||
- default:
|
||||
help: Initializes the project data and skips input
|
||||
short: d
|
||||
long: default
|
||||
- style:
|
||||
help: Sets the project style
|
||||
short: s
|
||||
long: style
|
||||
takes_value: true
|
||||
value_name: STYLE
|
||||
- NAME:
|
||||
help: Sets the project name
|
||||
required: true
|
||||
index: 1
|
||||
- project:
|
||||
about: Displays the current project info
|
||||
version: "0.1.0"
|
||||
author: Skye P. <spiralixp@gmail.com>
|
||||
args:
|
||||
- path:
|
||||
help: The relative path to the project
|
||||
short: p
|
||||
long: path
|
||||
takes_value: true
|
||||
value_name: PATH
|
||||
- script:
|
||||
about: Retrieves Denizen script data
|
||||
version: "0.1.0"
|
||||
author: Skye P. <spiralixp@gmail.com>
|
||||
args:
|
||||
- NAME:
|
||||
help: Sets the script name
|
||||
index: 1
|
1
src/config.rs
Normal file
1
src/config.rs
Normal file
|
@ -0,0 +1 @@
|
|||
pub mod styles;
|
35
src/config/styles.rs
Normal file
35
src/config/styles.rs
Normal file
|
@ -0,0 +1,35 @@
|
|||
use std::fs::{read_to_string, write};
|
||||
use std::path::Path;
|
||||
|
||||
use dirs::config_dir;
|
||||
|
||||
use crate::io::fs::create_dir;
|
||||
|
||||
pub fn get_dir() -> String {
|
||||
String::from(config_dir().unwrap().to_str().unwrap())
|
||||
}
|
||||
|
||||
pub fn init_styles(force: bool) {
|
||||
let dir = format!("{}/dzp_styles", get_dir());
|
||||
|
||||
if force || !Path::new(&dir).exists() {
|
||||
create_dir(dir.as_str(), false);
|
||||
let _ = write(format!("{}/default.txt", dir), "src/data\nsrc/util\nsrc/main");
|
||||
let _ = write(format!("{}/main.txt", dir), "src/main");
|
||||
}
|
||||
}
|
||||
|
||||
pub fn read_style(style: &str) -> Result<Vec<String>, String> {
|
||||
let dir = format!("{}/dzp_styles/{}.txt", get_dir(), style);
|
||||
|
||||
match read_to_string(dir) {
|
||||
Ok(txt) => {
|
||||
Ok(txt
|
||||
.split_terminator('\n')
|
||||
.map(|s| String::from(s))
|
||||
.collect::<Vec<String>>()
|
||||
)
|
||||
},
|
||||
Err(e) => Err(e.to_string())
|
||||
}
|
||||
}
|
57
src/io/fs.rs
Normal file
57
src/io/fs.rs
Normal file
|
@ -0,0 +1,57 @@
|
|||
use std::collections::BTreeMap;
|
||||
use std::fs::{create_dir_all, write, read_to_string};
|
||||
|
||||
use serde_yaml::{from_str, Value};
|
||||
use walkdir::WalkDir;
|
||||
|
||||
use super::log::err;
|
||||
|
||||
pub fn create_dir(path: &str, debug: bool) {
|
||||
if debug { println!("Creating {}...", path); }
|
||||
|
||||
match create_dir_all(path) {
|
||||
Ok(_) => (),
|
||||
Err(e) => err("Failed to create directory.", Some(e.to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create(path: &str, content: String) {
|
||||
println!("Creating {}...", path);
|
||||
|
||||
match write(path, content) {
|
||||
Ok(_) => (),
|
||||
Err(e) => err("Failed to create file.", Some(e.to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
pub type ScriptContents = BTreeMap<String, Value>;
|
||||
pub type ScriptFile = BTreeMap<String, ScriptContents>;
|
||||
|
||||
pub fn find_scripts() -> BTreeMap<String, (String, ScriptContents)> {
|
||||
// Get files in current directory
|
||||
let files = WalkDir::new(".").into_iter().filter_map(|e| e.ok());
|
||||
// File extension needs to be .dsc
|
||||
let script_files = files.filter(|f| f.path().extension().unwrap_or_default() == "dsc");
|
||||
// Return both the path string and the file contents
|
||||
let file_pairs = script_files.map(|f| {
|
||||
let path = String::from(f.clone().path().to_string_lossy());
|
||||
(path, read_to_string(f.path()))
|
||||
})
|
||||
.filter(|r| r.1.is_ok());
|
||||
// Parse file contents
|
||||
let parsed_files = file_pairs.map(|(p, c)| (p, from_str::<ScriptFile>(&c.unwrap())))
|
||||
// Validate parse
|
||||
.filter(|r| r.1.is_ok())
|
||||
.map(|(p, c)| (p, c.unwrap()))
|
||||
.collect::<Vec<(String, ScriptFile)>>();
|
||||
|
||||
let mut result = BTreeMap::<String, (String, ScriptContents)>::new();
|
||||
|
||||
for (path, scripts) in parsed_files {
|
||||
for (script, contents) in scripts {
|
||||
result.insert(script, (path.clone(), contents));
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
13
src/io/log.rs
Normal file
13
src/io/log.rs
Normal file
|
@ -0,0 +1,13 @@
|
|||
use ansi_term::Color::{Red, Black};
|
||||
|
||||
pub fn err(text: &str, reason: Option<String>) {
|
||||
let msg = Red.paint(text);
|
||||
|
||||
match reason {
|
||||
Some(r) => {
|
||||
let rsn = Black.bold().paint(r);
|
||||
println!("{} {}", msg, rsn);
|
||||
}
|
||||
None => println!("{}", msg)
|
||||
}
|
||||
}
|
23
src/main.rs
Normal file
23
src/main.rs
Normal file
|
@ -0,0 +1,23 @@
|
|||
use clap::{App, load_yaml};
|
||||
|
||||
mod config;
|
||||
mod io;
|
||||
mod structs;
|
||||
mod subcmd;
|
||||
|
||||
fn main() {
|
||||
#[cfg(target_os = "windows")]
|
||||
ansi_term::enable_ansi_support();
|
||||
|
||||
let yaml = load_yaml!("cli.yml");
|
||||
let mut app = App::from_yaml(yaml);
|
||||
|
||||
config::styles::init_styles(true);
|
||||
|
||||
let _ = match app.clone().get_matches().subcommand() {
|
||||
("new", Some(sub)) => subcmd::new::new(&sub),
|
||||
("project", Some(sub)) => subcmd::project::project(&sub),
|
||||
("script", Some(sub)) => subcmd::script::script(&sub),
|
||||
_ => { let _ = app.print_help(); }
|
||||
};
|
||||
}
|
1
src/structs.rs
Normal file
1
src/structs.rs
Normal file
|
@ -0,0 +1 @@
|
|||
pub mod project;
|
166
src/structs/project.rs
Normal file
166
src/structs/project.rs
Normal file
|
@ -0,0 +1,166 @@
|
|||
use lazer::lazer;
|
||||
use license::from_id;
|
||||
use rustyline::Editor;
|
||||
use semver::Version;
|
||||
use serde::{Serialize, Deserialize};
|
||||
use serde_yaml::to_string;
|
||||
use url::Url;
|
||||
|
||||
use crate::io::log::err;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct ProjectData {
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub authors: Vec<String>,
|
||||
pub version: Version,
|
||||
pub license: String,
|
||||
pub homepage: Option<Url>,
|
||||
pub repository: Option<Url>,
|
||||
pub dependencies: Option<Vec<String>>
|
||||
}
|
||||
|
||||
type Error = rustyline::error::ReadlineError;
|
||||
|
||||
impl ProjectData {
|
||||
fn input(text: &str, rl: &mut Editor<()>) -> Result<String, Error> {
|
||||
let line = rl.readline(&format!("{}: ", text))?;
|
||||
rl.add_history_entry(&line);
|
||||
Ok(line.trim().to_string())
|
||||
}
|
||||
|
||||
fn input_authors(rl: &mut Editor<()>) -> Result<Vec<String>, Error> {
|
||||
let input = Self::input("Authors", rl)?;
|
||||
|
||||
Ok(input
|
||||
.split_terminator(',')
|
||||
.map(|s| String::from(s.trim()))
|
||||
.filter(|s| !s.is_empty())
|
||||
.collect())
|
||||
}
|
||||
|
||||
fn input_version(rl: &mut Editor<()>) -> Result<Version, Error> {
|
||||
loop {
|
||||
let input = Self::input("Version", rl)?;
|
||||
if input.is_empty() { return Ok(Version::new(0, 1, 0)) }
|
||||
|
||||
let v = Version::parse(&input);
|
||||
|
||||
match v {
|
||||
Ok(version) => return Ok(version),
|
||||
Err(_) => err("Invalid version.", None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn input_url(text: &str, rl: &mut Editor<()>) -> Result<Option<Url>, Error> {
|
||||
loop {
|
||||
let input = Self::input(text, rl)?;
|
||||
if input.is_empty() { return Ok(None) }
|
||||
|
||||
let u = Url::parse(&input);
|
||||
|
||||
match u {
|
||||
Ok(url) => return Ok(Some(url)),
|
||||
Err(_) => err("Invalid URL.", None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn input_license(rl: &mut Editor<()>) -> Result<String, Error> {
|
||||
loop {
|
||||
let input = Self::input("License", rl)?;
|
||||
if input.is_empty() { return Ok(String::from("MIT")) }
|
||||
|
||||
let l = from_id(&input);
|
||||
|
||||
match l {
|
||||
Some(_) => return Ok(String::from(input)),
|
||||
None => err("Invalid license.", None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_input(name: String) -> Result<Self, Error> {
|
||||
let mut rl = Editor::<()>::new();
|
||||
|
||||
let description: String = Self::input("Description", &mut rl)?;
|
||||
let authors = Self::input_authors(&mut rl)?;
|
||||
let version = Self::input_version(&mut rl)?;
|
||||
let license = Self::input_license(&mut rl)?;
|
||||
let homepage = Self::input_url("Homepage", &mut rl)?;
|
||||
let repository = Self::input_url("Repository", &mut rl)?;
|
||||
|
||||
println!();
|
||||
|
||||
Ok(Self {
|
||||
name,
|
||||
description,
|
||||
authors,
|
||||
version,
|
||||
license,
|
||||
homepage,
|
||||
repository,
|
||||
dependencies: Some(Vec::new())
|
||||
})
|
||||
}
|
||||
|
||||
pub fn from_name(name: String) -> Self {
|
||||
Self {
|
||||
name,
|
||||
description: String::new(),
|
||||
authors: Vec::<String>::new(),
|
||||
version: Version::new(0, 1, 0),
|
||||
license: String::from("MIT"),
|
||||
homepage: None,
|
||||
repository: None,
|
||||
dependencies: Some(Vec::new())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn readme_header(&self) -> String {
|
||||
format!("# {}\n\n{}", self.name, if self.description.is_empty() {
|
||||
String::from("Sample description")
|
||||
} else {
|
||||
self.description.clone()
|
||||
})
|
||||
}
|
||||
|
||||
pub fn license_text(&self) -> String {
|
||||
from_id(&self.license).unwrap_or(&license::MIT).text().to_string()
|
||||
}
|
||||
|
||||
pub fn yaml(&self) -> String {
|
||||
to_string(&self).ok().unwrap()
|
||||
}
|
||||
|
||||
pub fn print_url(key: &str, url: Option<Url>) {
|
||||
match url {
|
||||
Some(u) => println!("{}: {}", key, u),
|
||||
None => ()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn print(&self) {
|
||||
lazer()
|
||||
.print(&self.name)
|
||||
.print_ln(&format!(" v{}", self.version))
|
||||
.print_ln(&self.description)
|
||||
.print_ln("")
|
||||
.iff(self.authors.len() > 1)
|
||||
.print_ln(&format!("Authors: {}", self.authors.join(", ")))
|
||||
.el()
|
||||
.print_ln(&format!("Author: {}", self.authors.first().unwrap()))
|
||||
.end()
|
||||
.print_ln(&format!("License: {}", self.license));
|
||||
|
||||
Self::print_url("Homepage", self.homepage.clone());
|
||||
Self::print_url("Repository", self.repository.clone());
|
||||
|
||||
lazer()
|
||||
.iff(self.dependencies.is_some())
|
||||
.print_ln("\nDependencies:")
|
||||
.print_ln(&self.dependencies.clone().unwrap_or(Vec::new()).iter().map(|s| format!("- {}", s)).collect::<Vec<String>>().join("\n"))
|
||||
.end();
|
||||
}
|
||||
}
|
3
src/subcmd.rs
Normal file
3
src/subcmd.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
pub mod new;
|
||||
pub mod project;
|
||||
pub mod script;
|
56
src/subcmd/new.rs
Normal file
56
src/subcmd/new.rs
Normal file
|
@ -0,0 +1,56 @@
|
|||
use std::env::current_dir;
|
||||
|
||||
use clap::ArgMatches;
|
||||
use git2::Repository;
|
||||
|
||||
use crate::config::styles::read_style;
|
||||
use crate::io::{log::err, fs::{create_dir, create}};
|
||||
use crate::structs::project::ProjectData;
|
||||
|
||||
const MAIN: &str = r#"
|
||||
type: world
|
||||
events:
|
||||
after server start:
|
||||
- debug log "Hello, world!""#;
|
||||
|
||||
pub fn new(matches: &ArgMatches) {
|
||||
// Name of the project
|
||||
let name: String = matches.value_of("NAME").unwrap().to_string();
|
||||
// Style argument
|
||||
let style = matches.value_of("style").unwrap_or("default");
|
||||
// Forced to discontinue if unable to read style
|
||||
match read_style(style) {
|
||||
Ok(dirs) => {
|
||||
// The project data object
|
||||
// Take input if default argument not supplied
|
||||
let project = if matches.is_present("default") {
|
||||
Ok(ProjectData::from_name(name))
|
||||
} else {
|
||||
ProjectData::from_input(name)
|
||||
};
|
||||
|
||||
if let Ok(project) = project {
|
||||
// Create style directories
|
||||
for dir in &dirs {
|
||||
create_dir(dir.as_str(), true);
|
||||
}
|
||||
// Main dsc file
|
||||
create(
|
||||
format!("{}/{}.dsc", dirs.last().unwrap(), &project.name).as_str(),
|
||||
format!("{}:{}", &project.name, MAIN));
|
||||
// README & LICENSE
|
||||
create("README.md", project.readme_header());
|
||||
create("LICENSE", project.license_text());
|
||||
// Create dzp directory
|
||||
create_dir(".dzp", true);
|
||||
create(".dzp/project", project.yaml());
|
||||
// Initialize git repository if possible
|
||||
match Repository::init(current_dir().unwrap()) {
|
||||
Ok(_) => create(".gitignore", String::from("/.dzp")),
|
||||
Err(e) => err("Failed to initialize git repository.", Some(e.to_string()))
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => err("Invalid style.", Some(e.to_string()))
|
||||
}
|
||||
}
|
22
src/subcmd/project.rs
Normal file
22
src/subcmd/project.rs
Normal file
|
@ -0,0 +1,22 @@
|
|||
use clap::ArgMatches;
|
||||
use serde_yaml::from_str;
|
||||
|
||||
use crate::io::log::err;
|
||||
use crate::structs::project::ProjectData;
|
||||
|
||||
pub fn project(matches: &ArgMatches) {
|
||||
let path = matches.value_of("path").unwrap_or("./");
|
||||
|
||||
match std::fs::read_to_string(path.to_owned() + ".dzp/project") {
|
||||
Ok(file) => {
|
||||
match from_str::<ProjectData>(&file) {
|
||||
Ok(data) => {
|
||||
println!();
|
||||
data.print();
|
||||
},
|
||||
Err(e) => err("Failed to parse project file.", Some(e.to_string()))
|
||||
}
|
||||
}
|
||||
Err(e) => err("Failed to read project file.", Some(e.to_string()))
|
||||
}
|
||||
}
|
50
src/subcmd/script.rs
Normal file
50
src/subcmd/script.rs
Normal file
|
@ -0,0 +1,50 @@
|
|||
use clap::ArgMatches;
|
||||
use lazer::lazer;
|
||||
use serde_yaml::from_value;
|
||||
|
||||
use crate::io::log::err;
|
||||
use crate::io::fs::{find_scripts, ScriptContents};
|
||||
|
||||
pub fn print_script(name: &str, path: &String, data: &ScriptContents) {
|
||||
if !data.contains_key("type") {
|
||||
err("Script does not contain a 'type' key.", None);
|
||||
} else {
|
||||
match from_value::<String>(data.get("type").unwrap().clone()) {
|
||||
Ok(script_type) => {
|
||||
lazer()
|
||||
.print_ln(&format!("Name: {}", name))
|
||||
.print_ln(&format!("Type: {}", script_type))
|
||||
.print_ln(&format!("Path: {}", path))
|
||||
.print_ln(&format!("Keys: {}", data.keys().map(|s| s.clone()).collect::<Vec<String>>().join(", ")));
|
||||
}
|
||||
Err(e) => err("Failed to parse 'type' key.", Some(e.to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
pub fn script(matches: &ArgMatches) {
|
||||
let scripts = find_scripts();
|
||||
|
||||
match matches.value_of("NAME") {
|
||||
Some(name) => {
|
||||
match scripts.get(name) {
|
||||
Some((path, data)) => {
|
||||
println!();
|
||||
print_script(name, &path, &data);
|
||||
}
|
||||
None => err("Failed to find script.", None)
|
||||
}
|
||||
},
|
||||
None => {
|
||||
let keys = scripts.keys()
|
||||
.clone()
|
||||
.map(|s| String::from(s))
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ");
|
||||
|
||||
println!("{}", keys);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue