1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
//! A small utility library for binary applications. //! //! # Examples //! //! ```rust //! extern crate pkg; //! //! fn main() { //! println!("{} {}\n{}", pkg::name(), pkg::version(), pkg::description()); //! } //! ``` //! //! # Cargo features //! //! This crate provides one cargo feature: //! //! - `nightly`: This uses language features only available on the nightly //! release channel for more optimal implementations. #![deny(missing_docs, warnings)] #[macro_use] extern crate lazy_static; #[macro_use] mod macros; lazy_static! { static ref AUTHORS: Vec<&'static str> = pkg_authors!().split(';').collect(); static ref BIN_NAME: Option<String> = { use std::env; use std::path::PathBuf; let arg0 = env::args_os().next()?; let path = PathBuf::from(arg0); let file_name = path.file_stem()?; Some(file_name.to_str()?.to_owned()) }; } /// Returns the crate name. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!("The crate name is {}", pkg::name()); /// } /// ``` pub fn name() -> &'static str { pkg_name!() } /// Returns the crate author. /// /// # Assumption /// /// The crate only has the one author, otherwise this will return the list of /// authors separated by semicolons. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!("The crate author is {}", pkg::author()); /// } /// ``` pub fn author() -> &'static str { pkg_authors!() } /// Returns a slice reference of the crate authors. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!("The crate authors are: {}", pkg::authors().join(", ")); /// } /// ``` pub fn authors() -> &'static [&'static str] { &*AUTHORS } /// Returns the crate version. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!("The crate version is {}", pkg::version()); /// } /// ``` pub fn version() -> &'static str { pkg_version!() } /// Returns the crate description. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!("The crate description is {}", pkg::description()); /// } /// ``` pub fn description() -> &'static str { pkg_description!() } /// Returns the crate homepage. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!("The crate homepage is {}", pkg::homepage()); /// } /// ``` pub fn homepage() -> &'static str { pkg_homepage!() } /// Returns the name of the binary file. /// /// # Examples /// /// ```rust /// extern crate pkg; /// /// fn main() { /// println!( /// "The binary file name is {}", /// pkg::bin_name().unwrap_or("unknown") /// ); /// } /// ``` pub fn bin_name() -> Option<&'static str> { match *BIN_NAME { Some(ref name) => Some(name), _ => None, } }