4 个版本
0.3.2 | 2022 年 5 月 3 日 |
---|---|
0.3.1 | 2022 年 5 月 2 日 |
0.3.0 | 2021 年 1 月 8 日 |
0.2.4 | 2021 年 1 月 3 日 |
#479 in 数学
68KB
1.5K SLoC
CostOf.Life
这是 CostOf.Life 库和命令行客户端。
有关项目的更详细介绍,请查看网站: thecostof.life
安装
使用 cargo install costoflife
安装它
示例
要添加单个交易,请使用命令 costoflife add
|> costoflife add Netflix 7.99€ 100320 1m12x .movies .covid
看看实际效果
交易
该库解析交易并计算每个交易的 每日金额。有关更详细的解释,请查看 CostOf.life 网站。
交易属性
- 名称:描述性名称
- 金额:货币金额
- 使用寿命:交易适用的持续时间
- 开始日期:从何时开始计算使用寿命的日期
- 标签:用于分组交易
作为简单的接口,库将字符串解析为交易,字符串的格式在示例中显示,详细信息如下。
解析规则
库将输入字符串标记化并查找以下列表中的模式。任何无法识别为模式的都将设置为交易的标题。标题是 必需的
金额
交易的货币价值,必需
Amount ::= Natural ( '.' Digit Digit? )? "€"
Natural ::= NaturalDigit Digit*
NaturalDigit ::= #'[1-9]'
Digit ::= "0" | NaturalDigit
目前唯一可用的货币是 €
示例
10€
10000.99€
使用寿命
交易的持续时间,可选,默认为 1d
。
Lifetime ::= Duration Repeat?
Duration ::= Natural TimeUnit
Repeat ::= Natural "x"
TimeUnit ::= "d" | "w" | "m" | "y"
其中 TimeUnit
是
d
天w
周m
月y
年
示例
1m12x
=> 一个月重复 12 次,例如用于每月订阅(Netflix 等)12m
=> 一次 12 个月,等同于1y
1w52x
=> 一周52次,例如全年的每周杂货支出
💡 重复次数会影响交易总额:
10€ 1m12x
将产生总额为120€
的交易,而12m1x
将在12个月内产生总额为10€
的单次交易
开始日期
交易开始日期,可选,默认为当前日期,使用小端格式(日,月,年)。
Date ::= Day Month Year
Month ::= "1" #'[0-2]' | "0" NaturalDigit
Day ::= '0' #'[1-9]' | #'[1-2]' Digit | '3' #'[0-1]'
Year ::= Digit Digit
Natural ::= NaturalDigit Digit*
NaturalDigit ::= #'[1-9]'
Digit ::= "0" | NaturalDigit
示例
030521
=> 2021年3月3日312122
=> 2022年12月31日
标签
用于标记交易,可选。为了方便,使用哈希标签格式。
HashTag ::= ('#' | '.') Word
EOL ::= '\r'? '\n'
Word ::= AlphaNum+ [ (' ' | '\t')+ | EOL ]
AlphaNum ::= #'[A-Za-z0-9_-]'
示例
#生活方式
.任何东西
附录
这里列出了完整的语法
Tx ::= ( Amount | Lifetime | StartDate | HashTag ) ( SEP ( Amount | Lifetime | StartDate | HashTag ) )+ EOL
EOL ::= '\r'? '\n'
SEP ::= (' ' | '\t')+
Lifetime ::= Duration Repeat?
Duration ::= Natural TimeUnit
Repeat ::= Natural "x"
TimeUnit ::= "d" | "w" | "m" | "y"
StartDate ::= Day Month Year
Month ::= "1" #'[0-2]' | "0" NaturalDigit
Day ::= '0' #'[1-9]' | #'[1-2]' Digit | '3' #'[0-1]'
Year ::= Digit Digit
Amount ::= Natural ( '.' Digit Digit? )? "€"
Natural ::= NaturalDigit Digit*
NaturalDigit ::= #'[1-9]'
Digit ::= "0" | NaturalDigit
Int ::= "+" | "-" Digit+
HashTag ::= ('#' | '.') Word
Word ::= AlphaNum+
AlphaNum ::= #'[A-Za-z0-9_-]'
由 adgb 制作
技术设置
- 安装 rust
- 安装 cargo-edit:
cargo install cargo-edit
。Cargo edit 用于管理依赖项。 - 安装 cargo-bump:
cargo install cargo-bump
。Cargo bump 用于增加版本。
依赖项
~8–18MB
~232K SLoC