rust-jsonnet 是 Google Jsonnet 对 rust 操作库.
github:https://github.com/yuduanchen/rust-jsonnet
google jsonnet 官方推荐库列表:http://google.github.io/jsonnet/doc/bindings.html
Google Jsonnet 介绍:
jsonnet 是google发布的新一代json协议。如果说现有的json是一种轻量级的数据交换协议的话,那么jsonnet好比json的2.0版本。赋予了json思想、给予了json注释、引用、算术运算、条件操作符,数组和对象内含、引入、函数、局部变量、继承等强大的能力。
hello world:
#[warn(unused_must_use)] extern crate libc; extern crate jsonnet; use libc::c_char; use std::str; use std::error::Error; use std::fs::File; use std::io::prelude::*; use std::path::Path; use std::ffi::CStr; use std::ffi::CString; use jsonnet::ffi::command::{ Jsonnet }; pub type JsonnetResult = Result<String, String>; pub fn ctos(msg_buf : *const c_char)-> String{ let msg_str: &CStr = unsafe { CStr::from_ptr(msg_buf) }; let buf: &[u8] = msg_str.to_bytes(); let str_buf: &str = str::from_utf8(buf).unwrap(); let msg_data: String = str_buf.to_owned(); return msg_data; } pub fn version(){ let msg_buf: *const c_char = Jsonnet::version(); let msg_data: String = ctos(msg_buf); println!("{:?}", msg_data); } pub fn evaluate_file(){ let filename : *const libc::c_char = CString::new("./t.jsonnet") .unwrap().as_ptr(); let json = match Jsonnet::evaluate_file(filename) { Ok(json) => json, Err(e) => panic!("{:?}", e) }; println!("{:?}", json); } pub fn evaluate_snippet(){ let path = Path::new("./t.jsonnet"); let display = path.display(); let mut file = match File::open(&path) { Err(why) => panic!("couldn't open {}: {}", display, Error::description(&why)), Ok(file) => file, }; let mut s = String::new(); file.read_to_string(&mut s).unwrap(); let json_tpl : *const c_char = s.as_ptr() as *const c_char; let json = match Jsonnet::evaluate_snippet(json_tpl) { Ok(json) => json, Err(e) => panic!("{:?}", e) }; println!("{:?}", json); } fn main() { version(); evaluate_file(); evaluate_snippet(); Jsonnet::destroy(); }
前言 本文记录了笔者学习序列化以及将其运用在网络编程中的过程,同时还记录了一个由于意外而发生的os报错( broken pipen )。笔者的学习视频来自b站令狐一冲。 一、序列化是什么? 百度百科说,序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重
4. HTTP Server 4.1 构建server模块 因为HTTP Server需要引用HTTP Package,因此我们先在如下文件中添加依赖 /Users/qinjianquan/s1/httpserver/Cargo.toml [dependencies] http = {path = "../http"} 然后在如下文件夹中创建三个mod /Users/qinjianquan/s1
09 - 特型与泛型 Rust 的多态性: 特型(trait) 泛型(generic) 特型:Rust 对接口或抽象基类的实现。 如下写字节的特型 std::io::Write: trait Write { fn write(&mut self, buf: &[u8]) -> Result<usize>; fn flus(&mut self) -> Result<()>; fn wri
使用LVGL在RIOT上将PineTime表盘从C移植到Rust RIOT - The friendly OS for IoT https://github.com/RIOT-OS/RIOT 作者(李吕源,物联网技术与教育家)在文中谈到:将嵌入式C转换为Rust并不难(Converting Embedded C to RustLang is not that hard.) https://gith
xml的解析比json复杂,最起码xml在元素的属性中也能蕴藏信息。下面是一个xml文件post1.xml: <?xml version="1.0" encoding="utf-8" ?> <post id="1"> <content>你好,Golang</content> <author id="2">张三</author> </post> 表面上看,上述xml就是外层元素pos
Rust 是 Mozilla 的一个新的编程语言,由web语言的领军人物Brendan Eich(js之父),Dave Herman以及Mozilla公司的Graydon Hoare 合力开发。 创建这个新语言的目的是为了解决一个很顽疾的问题:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升。Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,
我想写一个模拟 DNF 装备增幅的程序,通过多次样本执行得到平均每件增幅 10 装备需要增幅多少次。装备 +4 之前不会失败,+4 之后会失败且失败后还会掉级,具体如下图所示: 公会秘药和普雷宠物会额外增加每次增幅的成功率 1% 和 4%,所以一共分了三种情况。 我最开始用 js 写了一版: 后来想到我刚学了 rust,不如练练手,而且 rust 很快,于是又写了一版: 然而实际上 rust 代码
Rust-GPU 是面向 GPU 编程的开源项目,目标是使 Rust 成为 GPU 着色器开发的“一等公民”编程语言和生态系统。 示例 use glam::{Vec3, Vec4, vec2, vec3};#[spirv(fragment)]pub fn main( #[spirv(frag_coord)] in_frag_coord: &Vec4, #[spirv(push_cons
Visual Rust 是一个可视化的 Rust 语言集成开发环境。这是一个 Visual Studio 的扩展,首先是一个 Rust 语言编辑器,同时可创建、编译和运行 Rust 项目。
Goose 是受 Locust 启发的 Rust 负载测试工具。用户行为通过标准的 Rust 代码定义,负载测试是依赖于 Goose 库的应用程序,Web 请求是使用 Reqwest HTTP 客户端发出的。 主要特性 文档齐全 基于 Reqwest,支持异步发起请求 所提供的指标与 Locust 报告一致
rbatis 是一个用 Rust 编写的高性能、安全、动态 SQL(编译时)ORM 框架,受 Mybatis 和 MybatisPlus 的启发。它提供高性能,基于 Future,带有 async_std/tokio,单线程基准测试可以轻松达到 200,000 QPS。 特性: 编译时动态 sql(mybatis 动态 sql 标签)、全异步(Future)、生产实践(abs_admin) 内存安
Racer 是 Rust 的代码补全程序,该实用程序旨在为编辑器和 IDE 提供 Rust 代码补全。 RACER = Rust Auto-Complete-er,该项目展望,也许有一天,'er' 可以代表 exploring + refactoring 等内容。 Racer 作为 Rust 语言服务器中的静态库存在,许多 IDE 等工具可以轻松集成这样的底层功能,目前包括以下工具都有集成 Rac
rust-av 是一个用 Rust 语言的类型,内存和数据安全属性编写的多媒体工具库。 编译 cargo build 运行测试 cargo test 说明 代码仍然在不断变化,API也正在慢慢充实,请参阅子包装箱。