mirror of
https://github.com/ivabus/smurf
synced 2024-11-23 08:55:11 +03:00
Initial commit
This commit is contained in:
commit
88264697ca
8 changed files with 111 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
/Cargo.lock
|
10
.rustfmt.toml
Normal file
10
.rustfmt.toml
Normal file
|
@ -0,0 +1,10 @@
|
|||
edition = "2021"
|
||||
hard_tabs = true
|
||||
merge_derives = true
|
||||
reorder_imports = true
|
||||
reorder_modules = true
|
||||
use_field_init_shorthand = true
|
||||
use_small_heuristics = "Off"
|
||||
wrap_comments = true
|
||||
comment_width = 80
|
||||
indent_style = "Block"
|
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "smurf"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
authors = ["Ivan Bushchik <ivabus@ivabus.dev>"]
|
||||
description = "SMall Useful Rust Functions"
|
||||
readme = "README.md"
|
||||
repository = "https://github.com/ivabus/smurf"
|
||||
license = "MIT"
|
||||
|
||||
|
||||
[dependencies]
|
20
LICENSE
Normal file
20
LICENSE
Normal file
|
@ -0,0 +1,20 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2023 Ivan Bushchik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
|
||||
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13
README.md
Normal file
13
README.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# SmURF
|
||||
|
||||
> SMall Useful Rust Functions
|
||||
|
||||
## Components
|
||||
|
||||
### Shell
|
||||
|
||||
- macro `shell!`
|
||||
|
||||
### File
|
||||
|
||||
- function `read_to_str`
|
18
src/file.rs
Normal file
18
src/file.rs
Normal file
|
@ -0,0 +1,18 @@
|
|||
use log::error;
|
||||
use std::fs::File;
|
||||
use std::io::{prelude::*, BufReader};
|
||||
|
||||
pub fn read_to_str(path: &std::path::PathBuf) -> String {
|
||||
let file = File::open(&path);
|
||||
let file = match file {
|
||||
Ok(data) => data,
|
||||
Err(err) => {
|
||||
error!("Cannot open file \"{}\"", path.display());
|
||||
std::process::exit(2)
|
||||
}
|
||||
};
|
||||
let mut buf_reader = BufReader::new(file);
|
||||
let mut content = String::new();
|
||||
buf_reader.read_to_string(&mut content).unwrap();
|
||||
content
|
||||
}
|
2
src/lib.rs
Normal file
2
src/lib.rs
Normal file
|
@ -0,0 +1,2 @@
|
|||
mod file;
|
||||
mod shell;
|
34
src/shell.rs
Normal file
34
src/shell.rs
Normal file
|
@ -0,0 +1,34 @@
|
|||
use std::process::Command;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! shell {
|
||||
($($arg:tt)*) => {{
|
||||
$crate::shell::run(format!($($arg)*))
|
||||
}};
|
||||
}
|
||||
|
||||
pub struct ShellResult {
|
||||
pub code: i32,
|
||||
pub stdout: String,
|
||||
pub stderr: String,
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn run(command: String) -> ShellResult {
|
||||
let mut iter = command.split_whitespace();
|
||||
let mut current = iter.next();
|
||||
let mut words: Vec<&str> = vec![];
|
||||
while current != None {
|
||||
words.push(current.unwrap());
|
||||
current = iter.next();
|
||||
}
|
||||
let command = Command::new(&words[0])
|
||||
.args(&words[1..])
|
||||
.output()
|
||||
.expect(&format!("Failed to execute '{}'", command));
|
||||
return ShellResult {
|
||||
code: command.status.code().unwrap(),
|
||||
stdout: String::from_utf8(command.stdout).unwrap(),
|
||||
stderr: String::from_utf8(command.stderr).unwrap(),
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue