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
use crate::errors::*; use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; #[derive( Serialize, Deserialize, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, juniper::GraphQLObject, )] /// Metadata about the environment pub struct Env { /// The username pub username: String, /// The hostname, pub hostname: String, /// The distro pub distro: String, /// The real name for the user pub realname: String, /// The device name pub devicename: String, } impl Env { /// uses the PATH environment variable to search /// for a filename matching the specified name. /// if a matching filename is not found, it /// will check for the existence of name.exe /// and name.bat /// /// Example /// /// ``` /// use reef::Env; /// let git_path = Env::which("git").unwrap(); /// assert!(git_path.exists()); /// ``` pub fn which(name: &str) -> Result<PathBuf> { super::path::which(name) } /// extracts the text following the shebang #! /// /// Example /// /// given a file /// with the contents: /// /// #!C:/Ruby26-x64/bin/ruby.exe /// /// the shebang method will return C:/Ruby26-x64/bin/ruby.exe /// /// ``` /// use reef::Env; /// use std::env; /// let path = std::env::temp_dir().join("test.rb"); /// std::fs::write(&path,b"#!C:/Ruby26-x64/bin/ruby.exe")?; /// let target = Env::shebang(&path).unwrap(); /// assert_eq!("C:/Ruby26-x64/bin/ruby.exe",target); /// # Ok::<(), std::io::Error>(()) /// ``` pub fn shebang(path: &Path) -> Result<String> { super::path::shebang(path) } } impl Default for Env { fn default() -> Self { Env { username: whoami::username(), hostname: whoami::hostname(), distro: whoami::distro(), realname: whoami::realname(), devicename: whoami::devicename(), } } }