クソコマンドシリーズ

ss

n7mに引き続き、昔思いつきで作ったクソコマンドシリーズです。

SortStringの名前の通り、渡した文字列をソートしてくれます。それだけです。コードもこれだけ

#[macro_use]
extern crate clap;

use std::io::Read;

fn main() {
    let matches = clap_app!(ss =>
            (version:   crate_version!())
            (author:    crate_authors!())
            (about:     crate_description!())
            (@arg content: "sort content")
            (@arg input: -i --input "read from stdin")
        ).get_matches();

    if let Some(s) = matches.value_of("content") {
        println!("{}", sort(s.into()));
    } else if matches.is_present("input") {
        let mut s = Vec::new();
        std::io::stdin().read_to_end(&mut s).expect("Can't readline");
        println!("{}", sort(String::from_utf8_lossy(&s).into()));
    }
}

fn sort(s: String) -> String {
    let mut s = s.chars().collect::<Vec<_>>();
    s.sort();
    s.iter().collect::<String>().trim().into()
}

ソートするとこう

!!!!!!""""""""""""""#&&'((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))),,----..............8::::::::::::::::::::::;;;;;;;;;<<<=====>>>>>@@CRSSSSSVV[]_____________aaaaaaaaaaaaaaaaaaaaaaaaabcccccccccccccccccccccccddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffggggggghhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiillllllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnoooooooooooooooooooooooooooopppppppppppprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuvvvwxxy}}}}

3年位前に作ったので、まだclapをmacroで使ってる。最近は基本deriveで作ってます。

Usecase

$ ss まんがタイムきららキャラット
がきまららんイキタットムャラ
$ ss スーパーウルトラハイパーミラクルロマンチック
イウククスチットハパパマミララルルロンーーー
$ uname -a | ss -i
#--.../0000000111222222233333444445555666666666666667788889999ACDEEGILLMMMMNNOPPPRSSTTUY____acceeeeghiiiiinnnnnnruuuxxxxx~~~

なんかいいじゃん。

Rust

最近気づいた点として、

Rustを書く上で最低限これら3つの機能があればある程度快適な気がしています。これらを満たす言語、他にもありそうなので手を付けて確認してみたい。

おわりに

この記事はn01e0 Advent Calendar 2023の12日目の記事です。

明日はあるかわかりません

また、IPFactory OB Advent Calendar 2023の12日目の記事も兼ねています。