mirror of
https://github.com/ivabus/cargo-makima
synced 2024-12-04 20:45:08 +03:00
Initial commit
This commit is contained in:
commit
a260f7a4c9
6 changed files with 132 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/target
|
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]
|
||||
description = "Makima's here to abuse you when running cargo~"
|
||||
repository = "https://github.com/ivabus/cargo-makima"
|
||||
license = "MIT"
|
||||
name = "cargo-makima"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
rand = { version = "0.8.5" }
|
||||
serde = { version = "1.0.151", features = ["derive"] }
|
||||
serde_json = "1.0.91"
|
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.
|
22
responses.json
Normal file
22
responses.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"positive": [
|
||||
"Give paw",
|
||||
"Good boy",
|
||||
"Roll over️",
|
||||
"You don't have to think about a thing. Just trust me, okay?️",
|
||||
"Your hands are cold again. Let's go inside.️",
|
||||
"We’ll be working together until death do us apart",
|
||||
],
|
||||
"negative": [
|
||||
"You want to become a dog?",
|
||||
"Didn't we say that dogs aren't supposed to think?",
|
||||
"Open it. ",
|
||||
"You don't have to think about a thing. Just trust me, okay?",
|
||||
"What could I do to absolutely deny you of a normal life?️",
|
||||
"I gave you a job. I have you money. I gave you lots of good food to eat. I even prepared you a family that I thought you would get along nicely with. I made that kind of happiness become your normalcy, so that I could destroy it all.",
|
||||
"From now on, any happiness you feel, any semblance of normal life you may experience, will all be created by me, and it will all be destroyed by me.",
|
||||
"Your dad's death. It wasn't suicide. You killed him, didn't you?",
|
||||
"A human like you couldn't even wish for a normal life, could he?",
|
||||
"The necessary evil you speak of, is just an excuse to justify the evil things you do. Society has no need for that excuse"
|
||||
]
|
||||
}
|
67
src/main.rs
Normal file
67
src/main.rs
Normal file
|
@ -0,0 +1,67 @@
|
|||
#![allow(clippy::let_and_return)]
|
||||
|
||||
use rand::{rngs::StdRng, seq::SliceRandom, SeedableRng};
|
||||
use serde::Deserialize;
|
||||
|
||||
const RESPONSES: &str = include_str!("../responses.json");
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct Responses {
|
||||
positive: Vec<String>,
|
||||
negative: Vec<String>,
|
||||
}
|
||||
|
||||
enum ResponseType {
|
||||
Positive,
|
||||
Negative,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let code = real_main().unwrap_or_else(|e| {
|
||||
eprintln!("Error: {:?}", e);
|
||||
-1
|
||||
});
|
||||
std::process::exit(code)
|
||||
}
|
||||
|
||||
fn real_main() -> Result<i32, Box<dyn std::error::Error>> {
|
||||
let cargo = std::env::var("CARGO").unwrap_or_else(|_| "cargo".to_owned());
|
||||
let mut arg_iter = std::env::args();
|
||||
let _cargo = arg_iter.next();
|
||||
|
||||
let mut cmd = std::process::Command::new(cargo);
|
||||
cmd.args(arg_iter);
|
||||
let status = cmd.status()?;
|
||||
eprintln!("\x1b[1m");
|
||||
if status.success() {
|
||||
eprintln!("{}", select_response(ResponseType::Positive))
|
||||
} else {
|
||||
eprintln!("{}", select_response(ResponseType::Negative));
|
||||
}
|
||||
eprintln!("\x1b[0m");
|
||||
Ok(status.code().unwrap_or(-1))
|
||||
}
|
||||
|
||||
fn select_response(response_type: ResponseType) -> String {
|
||||
let mut rng = StdRng::from_entropy();
|
||||
|
||||
// Choose what mommy will say~
|
||||
let responses: Responses = serde_json::from_str(RESPONSES).expect("RESPONSES to be valid JSON");
|
||||
|
||||
let response = match response_type {
|
||||
ResponseType::Positive => &responses.positive,
|
||||
ResponseType::Negative => &responses.negative,
|
||||
}
|
||||
.choose(&mut rng)
|
||||
.expect("non-zero amount of responses");
|
||||
// Done~!
|
||||
response.clone()
|
||||
}
|
||||
|
||||
fn parse_options(env_var: &str, default: &str) -> Vec<String> {
|
||||
std::env::var(env_var)
|
||||
.unwrap_or_else(|_| default.to_owned())
|
||||
.split('/')
|
||||
.map(|s| s.to_owned())
|
||||
.collect()
|
||||
}
|
Loading…
Reference in a new issue