#### Rufl是一个Rust语言工具函数库。它提供了许多工具函数,让你的rust开发变得更简单. _Rufl是”rust util function"的缩写。_ [![crates.io](https://img.shields.io/crates/v/rufl?label=latest)](https://crates.io/crates/rufl) [![Documentation](https://docs.rs/rufl/badge.svg?version=0.1.3)](https://docs.rs/rufl/0.1.3) ![MSRV](https://img.shields.io/badge/rustc-1.71+-ab6000.svg) [![CI](https://github.com/duke-git/rufl/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/duke-git/rufl/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/duke-git/rufl/branch/main/graph/badge.svg)](https://app.codecov.io/gh/duke-git/rufl/tree/main) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/duke-git/rulf/blob/main/LICENSE) ## [English](./README.md) ## 特性 - 💪 强大: 支持常用开发特性, string, collection, random, file... - 💎 纯净: 保持最小范围外部依赖。 - 🛠 简洁: 结构组织良好,测试所有API函数。 ## 安装 - cargo add rufl ```toml [dependencies] rufl = "0.1.3" ``` ## 示例 这里以字符串函数`add_commas`为例,该函数的作用是每隔3位数(从右边开始)向数字值中添加逗号,并在前面添加前缀符号。为了实现这个功能,我们需要用到 `rufl::string`模块。 代码: ```rust use rufl::string; fn main() { let money_amount: String = string::add_commas("1234567", "$"); println!("current money is {}", money_amount); // current money is $1,234,567 } ``` ## 文档 ### 目录 - [collection](#collection) - [eventbus](#eventbus) - [file](#file) - [math](#math) - [random](#random) - [string](#string)

1. Collection mod包含用于操作集合数据类型的工具函数。 回到目录

```rust use rufl::collection; ``` - **all_match:** 如果集合的所有元素都通过判断函数检查,则返回true。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.all_match.html)] - **chunk:** 按照size参数均分vector。[[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.chunk.html)] - **count:** 返回给定元素在集合中出现的次数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.count.html)] - **count_by:** 使用判断函数迭代集合的元素,返回所有匹配元素的数量。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.count_by.html)] - **difference:** 比较两个集合元素,返回不相等的元素集合 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.difference.html)] - **difference_by:** 将两个集合中的每个元素调用比较函数,并比较它们的返回值,如果不相等返回在第一个参数集合中对应的值。[[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.difference_by.html)] - **difference_with:** 接受比较器函数,该比较器被调用以将两个集合的元素进行比较。结果值的顺序和引用由第一个集合确定。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.difference_with.html)] - **fill:** 用初始值填充vector的元素。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.fill.html)] - **filter:** 迭代集合的元素,返回通过判断函数的所有元素的集合。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.filter.html)] - **filter_map:** 返回一个对给定集合应用过滤和映射的集合。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.filter_map.html)] - **find:** 迭代集合的元素,返回符合判断函数的第一个元素及其索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.find.html)] - **find_last:** 迭代集合的元素,返回传递判断函数的最后一个元素及其索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.find_last.html)] - **index_of:** 返回在集合中找到第一次出现的元素的索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.index_of.html)] - **insert_at:** 在vector内的位置索引处插入一个元素。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.insert_at.html)] - **intersection:** 创建所有集合中包含的唯一元素的vector。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.intersection.html)] - **is_ascending_order:** 检查集合中所有元素是否按升序排列。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.is_ascending_order.html)] - **is_descending_order:** 检查集合中所有元素是否按降序排列。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.is_descending_order.html)] - **is_sorted:** 检查集合中的所有元素是否已排序(升序或降序)。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.is_sorted.html)] - **last_index_of:** 返回在集合中找到最后一次出现的元素的索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.last_index_of.html)] - **map:** 通过iteratee迭代器函数调用集合中的每个元素来创建新的元素集合。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.map.html)] - **max:** 返回集合元素的最大值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.max.html)] - **min:** 返回集合元素的最小值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.min.html)] - **none_match:** 如果集合中没有元素通过判断函数检查,则返回true。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.none_match.html)] - **partition:** 通过给定判断函数的评估对集合元素进行分区。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.partition.html)] - **reduce:** 对集合元素执行reduce操作。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.reduce.html)] - **reduce_right:** 类似Reduce操作,迭代切片元素顺序从右至左。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.reduce_right.html)] - **remove_all:** 删除vector内的所有特定元素。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.remove_all.html)] - **replace_all:** 将vector中的所有旧元素替换为新元素 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.replace_all.html)] - **replace_n:** 将vector中的前n个旧元素替换为新元素。[[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.replace_n.html)] - **shuffle:** 返回打乱值的vector。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.shuffle.html)] - **some_match:** 如果集合的任何一个元素通过判断函数检查,则返回true。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.some_match.html)] - **union:** 在所有集合之间创建唯一元素的vector。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.union.html)] - **union_by:** 在两个集合之间创建唯一元素的vector。 接受为每个集合的每个元素调用的判断函数,以生成计算唯一性的标准。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.union_by.html)] - **unique:** 删除集合(array、vector)中的重复元素,使用 PartialEq 相等比较。 [[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.unique.html)] - **unique_by:** 使用集合元素调用提供的自定义比较函数,返回唯一元素的vector。[[doc](https://docs.rs/rufl/0.1.3/rufl/collection/fn.unique_by.html)]

2. Eventbus实现了一个简单的发布/订阅事件库。回到目录

```rust use rufl::eventbus; ``` - **Event:** 事件是一个可以保存任何数据类型的结构。然后将其发布到事件总线。一旦发布,事件就会在事件总线运行时传递给每个订阅者。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/struct.Event.html)] - **EventBus:** Eventbus是所有事件的中心枢纽。 它负责管理所有订阅者并发布与事件总线相关的事件。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/struct.EventBus.html)]

3. File mod包括文件操作相关工具函数。回到目录

```rust use rufl::file; ``` - **clear:** 清空文件内容。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.clear.html)] - **copy_dirs:** 将src路径中的所有目录复制到dest路径。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.copy_dirs.html)] - **create:** 在指定路径中创建一个文件并返回它。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.create.html)] - **file_names:** 返回特定目录路径的所有文件名。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.file_names.html)] - **get_md5:** 获取文件md5值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.get_md5.html)] - **is_symlink:** 检查文件是否是符号链接文件。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.is_symlink.html)] - **read_to_buffer:** 读取文件到缓冲区字节数组。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.read_to_buffer.html)] - **read_to_lines:** 读取文件并返回行字符串vector。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.read_to_lines.html)] - **read_to_string:** 将文件读取为字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.read_to_string.html)] - **write_to:** 将数据写入文件,如果文件不存在,则创建它。 [[doc](https://docs.rs/rufl/0.1.3/rufl/eventbus/fn.write_to.html)]

4. Math mod包括一些数学计算函数。回到目录

```rust use rufl::math; ``` - **abs:** 计算绝对值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.abs.html)] - **average:** 计算平均数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.average.html)] - **factorial:** 计算阶乘。[[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.factorial.html)] - **fib_nth:** 计算斐波那契数列的第n个值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.fib_nth.html)] - **fib_seq:** 返回斐波那契数列。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.fib_seq.html)] - **fib_sum:** 计算斐波那契数列的总和值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.fib_sum.html)] - **gcd:** 计算最大公约数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.gcd.html)] - **harmonic:** 计算谐波值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.harmonic.html)] - **is_prime:** 判断素数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.is_prime.html)] - **lcm:** 计算最小公倍数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.lcm.html)] - **percent:** 计算百分比。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.percent.html)] - **round:** 将小数点后n位四舍五入为数字。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.round.html)] - **round_down:** 向下四舍五入并截去n位小数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.round_down.html)] - **round_up:** 对数字进行四舍五入并截去n位小数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.round_up.html)] - **sqrt:** 计算开平方。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.sqrt.html)] - **sum:** 计算和值。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.sum.html)] - **to_angle:** 弧度转角度。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.to_angle.html)] - **to_radian:** 角度转弧度。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.to_radian.html)] - **truncate:** 将数字截断至小数点后n位。 [[doc](https://docs.rs/rufl/0.1.3/rufl/math/fn.truncate.html)]

5. Random mod用于生成随机字符串和数字。回到目录

```rust use rufl::random; ``` - **alpha_number:** 生成随机字母或数字字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.alpha_number.html)] - **alphabet:** 生成随机英文字母字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.alphabet.html)] - **lower:** 生成随机小写英文字母字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.lower.html)] - **numberic:** 生成随机数字字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.numberic.html)] - **symbol:** 生成随机特殊字符字符串。 (!@#$%^&*()_+-=[]{}|;’:",./<>?). [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.symbol.html)] - **string:** 生成随机字符串(包括字母, 数字, 符号)。 [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.string.html)] - **upper:** 生成随机大写英文字母字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/random/fn.upper.html)]

6. String mod包括操作字符串(String&str)的工具函数回到目录

```rust use rufl::string; ``` - **add_commas:** 从右侧每3个数字向数字值添加逗号。支持前缀符号。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.add_commas.html)] - **after:** 返回源字符串中第一次出现指定子字符串之后的子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.after.html)] - **after_last:** 返回源字符串中最后一次出现指定子字符串之后的子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.after_last.html)] - **before:** 返回源字符串中第一次出现指定子字符串之前的子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.before.html)] - **before_last:** 返回源字符串中最后一次出现指定子字符串之前的子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.before_last.html)] - **camel_case:** 将字符串转换为驼峰式。[[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.camel_case.html)] - **capitalize:** 将字符串的第一个字符转换为大写,其余字符转换为小写。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.capitalize.html)] - **count_by:** 使用谓词函数计算目标字符串中的字符数,返回所有匹配字符的数量。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.count_by.html)] - **count_chars:** 返回目标字符串中的字符数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.count_chars.html)] - **count_graphemes:** 返回目标字符串中的字素计数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.count_graphemes.html)] - **count_words:** 返回目标字符串中的单词字数。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.count_words.html)] - **cut:** 在源字符串中搜索子字符串“sep”,并在子字符串“sep”第一次出现时将源字符串分成两部分:之前和之后。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.cut.html)] - **hide:** 隐藏源字符串中的一些字符并替换为特定的子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.hide.html)] - **index:** 搜索字符串并返回指定搜索子字符串第一次出现的索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.index.html)] - **index_all:** 搜索字符串并返回指定搜索子字符串出现的所有索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.index_all.html)] - **is_alpha:** 验证字符串是否是只包含字母字符。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_alpha.html)] - **is_alphanumberic:** 验证字符串是否是只包含字母和数字字符。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_alphanumberic.html)] - **is_digit:** 验证字符串是否是指包含数字(0-9)。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_digit.html)] - **is_dns:** 验证字符串是否是有效的dns。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_dns.html)] - **is_email:** 验证字符串是否是有效的email地址。[[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_email.html)] - **is_ipv4:** 验证字符串是否是有效的ipv4地址。[[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_ipv4.html)] - **is_ipv6:** 验证字符串是否是有效的ipv6地址。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_ipv6.html)] - **is_lowercase:** 验证字符串是否只包含小写字符。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_lowercase.html)] - **is_numberic:** 验证字符串是否可以转成有效数字。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_numberic.html)] - **is_strong_password:** 验证字符串是否是有效密码(强密码)。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_strong_password.html)] - **is_uppercase:** 验证字符串是否只包含大写字符。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_uppercase.html)] - **is_url:** 验证字符串是否是有效的url. [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.is_url.html)] - **kebab_case:** 将字符串转换为短横线大小写。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.kebab_case.html)] - **last_index:** 搜索字符串并返回指定搜索子字符串最后一次出现的索引。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.last_index.html)] - **lower_first:** 将字符串的第一个字符转换为小写字符。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.lower_first.html)] - **pad:** 如果字符串长度短于size,则在左右两侧填充字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.pad.html)] - **pad_end:** 如果字符串长度短于size,则在右侧填充字符串。[[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.pad_end.html)] - **pad_start:** 如果字符串长度短于size,则在左侧填充字符串。[[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.pad_start.html)] - **pascal_case:** 将字符串转换为帕斯卡大小写。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.pascal_case.html)] - **remove_all:** 删除源字符串中出现的所有指定子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.remove_all.html)] - **remove_first:** 删除源字符串中第一次出现的指定子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.remove_first.html)] - **remove_last:** 删除源字符串中最后一次出现的指定子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.remove_last.html)] - **removen:** 删除源字符串中的前n个匹配子字符串。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.removen.html)] - **snake_case:** 将字符串转换为蛇形大小写。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.snake_case.html)] - **split_chars:** 将输入字符串拆分为字符vector。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.split_chars.html)] - **split_graphemes:** 将目标字符串拆分为字素str的vector。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.split_graphemes.html)] - **split_words:** 将输入字符串拆分为其单词vector(基于大写字母或数字的位置)。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.split_words.html)] - **starts_with_offset:** 检查字符串是否在偏移位置以指定前缀开头。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.starts_with_offset.html)] - **substring:** 返回目标字符串中从起始索引到结束索引(不包括结束索引)的部分。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.substring.html)] - **title_case:** 将字符串转换为标题大小写。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.title_case.html)] - **upper_first:** 将字符串的第一个字符转换为大写字符。 [[doc](https://docs.rs/rufl/0.1.3/rufl/string/fn.upper_first.html)] ## 如何贡献代码 #### [贡献代码指南](./CONTRIBUTING.zh-CN.md)