40 个版本

新版本 0.1.72 2024 年 8 月 24 日
0.1.69 2024 年 7 月 30 日
0.1.49 2024 年 3 月 31 日
0.1.2 2023 年 12 月 23 日
0.0.16 2022 年 7 月 26 日

#68编程语言

Download history 333/week @ 2024-04-29 103/week @ 2024-05-20 144/week @ 2024-06-03 275/week @ 2024-06-10 165/week @ 2024-06-17 3/week @ 2024-06-24 223/week @ 2024-07-01 128/week @ 2024-07-08 237/week @ 2024-07-15 5/week @ 2024-07-22 257/week @ 2024-07-29 101/week @ 2024-08-05 158/week @ 2024-08-12

526 每月下载量

MIT 许可证

21KB
186 代码行

YAMLScript

给你的 YAML 文件添加逻辑

概述

使用 YAMLScript 加载 file.yaml

!yamlscript/v0/

# Get data from external sources:
=>:
  names-url =:
    "https://raw.githubusercontent.com/dominictarr/" +
            "random-name/master/first-names.json"

  name-list =: &first-names json/load(curl(names-url))

# Data object with literal keys and generated values:
name:: rand-nth(*first-names)
aka:: name-list.rand-nth()
age:: &num 2 * 3 * 7
color:: &hue qw(red green blue yellow)
          .shuffle()
          .first()
title:: "$(*num) shades of $(*hue)."

并获取

{
  "name": "Dolores",
  "aka": "Anita",
  "age": 42,
  "color": "green",
  "title": "42 shades of green."
}

描述

YAMLScript 是一种具有清晰 YAML 语法的函数式编程语言。

YAMLScript 可以用于增强普通 YAML 文件,例如使用函数式操作

  • 将其他 YAML 文件的(部分)导入到任何节点
  • 字符串插值,包括函数调用
  • 数据转换,包括您定义的

此 YAMLScript 库应成为您当前 YAML 加载器的即插即用替代品!

大多数现有的 YAML 文件已经是有效的 YAMLScript 文件。这意味着 YAMLScript 作为一个正常的 YAML 加载器运行,但如果需要,也可以评估函数表达式。

在底层,YAMLScript 代码编译成 Clojure 编程语言。这使得 YAMLScript 成为一个开箱即用的完整函数式编程语言。

尽管 YAMLScript 编译成 Clojure,而 Clojure 编译成 Java,但无需依赖 Java 或 JVM。YAMLScript 编译成原生共享库(libyamlscript.so),任何可以加载共享库的编程语言都可以使用。

要查看 YAMLScript 编译成的 Clojure 代码,您可以使用 YAMLScript CLI 二进制文件 ys 运行

$ ys --compile file.ys
(def names-url
  (+_ "https://raw.githubusercontent.com/dominictarr/"
      "random-name/master/first-names.json"))
(def name-list (_& 'first-names (json/load (curl names-url))))
{"age" (_& 'num (*_ 2 3 7)),
 "aka" (_-> name-list (list rand-nth)),
 "color" (_& 'hue (_-> (qw red green blue yellow) (list shuffle) (list first))),
 "name" (rand-nth (_** 'first-names)),
 "title" (str (_** 'num) " shades of " (_** 'hue) ".")}

Rust 使用方法

创建一个新的 Rust 项目

$ cargo new --bin prog
$ cd prog

添加文件 src/main.rs

use std::fs::File;
use std::io::prelude::*;
use yamlscript::YAMLScript;

fn main() -> std::io::Result<()> {
    let mut file = File::open("file.ys")?;
    let mut input = String::new();
    file.read_to_string(&mut input)?;
    let ys = YAMLScript::new().unwrap();
    let data = ys.load::<serde_json::Value>(&input).unwrap();
    println!("{data:?}");
    Ok(())
}

添加文件 file.ys

!yamlscript/v0

name =: "World"

=>::
  foo: [1, 2, ! inc(41)]
  bar:: load("other.yaml")
  baz:: "Hello, $name!"

添加文件 other.yaml

oh: Hello

运行

$ curl https://yamlscript.org/install | bash
$ cargo add yamlscript
$ cargo add serde_json
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/prog`
Object {"bar": Object {"oh": String("Hello")}, "baz": String("Hello, World!"), "foo": Array [Number(1), Number(2), Number(42)]}

安装

您可以像安装任何其他 Rust 模块一样安装此模块

$ cargo add yamlscript

但您需要系统安装 libyamlscript.so

一种简单的方法是使用

$ curl https://yamlscript.org/install | bash

注意:上面的命令将安装 YAMLScript 命令行工具的最新版本 ys 和共享库 libyamlscript.so,分别安装到 ~/.local/bin~/.local/lib

有关更多信息,请参阅 https://github.com/yaml/yamlscript/wiki/Installing-YAMLScript

另请参阅

作者

版权 2022-2024 Ingy döt Net [email protected]

本项目采用 MIT 许可证条款。有关详细信息,请参阅LICENSE

依赖项

~3MB
~67K SLoC