19个版本
0.7.1 | 2024年8月11日 |
---|---|
0.7.0 | 2024年7月12日 |
0.6.1 | 2024年2月23日 |
0.5.3 | 2023年12月2日 |
0.2.2 | 2022年6月15日 |
#133 in 编码
4,650 每月下载量
用于 4 个crate (2 直接)
190KB
4K SLoC
关于此crate
这是Rust中glib GVariant数据库文件格式的实现。它包括GResource XML解析器和创建兼容GResource文件的能力。
MSRV
此crate最低支持的Rust版本是1.75。
示例
创建GResource文件
使用GResourceXMLDocument
和GResourceBuilder
从XML创建GResource文件。
需要启用gresource
特性。
#[cfg(feature = "gresource")]
mod gresource {
use std::borrow::Cow;
use std::path::PathBuf;
use gvdb::gresource::BundleBuilder;
use gvdb::gresource::XmlManifest;
use gvdb::read::File;
const GRESOURCE_XML: &str = "test-data/gresource/test3.gresource.xml";
fn create_gresource() {
let doc = XmlManifest::from_file(&PathBuf::from(GRESOURCE_XML)).unwrap();
let builder = BundleBuilder::from_xml(doc).unwrap();
let data = builder.build().unwrap();
// To immediately read this data again, we can create a file reader from the data
let root = File::from_bytes(Cow::Owned(data)).unwrap();
}
}
使用FileWriter
创建简单的GVDB文件
use gvdb::write::{FileWriter, HashTableBuilder};
fn create_gvdb_file() {
let mut file_writer = FileWriter::new();
let mut table_builder = HashTableBuilder::new();
table_builder
.insert_string("string", "test string")
.unwrap();
let mut table_builder_2 = HashTableBuilder::new();
table_builder_2
.insert("int", 42u32)
.unwrap();
table_builder
.insert_table("table", table_builder_2)
.unwrap();
let file_data = file_writer.write_to_vec_with_table(table_builder).unwrap();
}
读取GVDB文件
存储在/gvdb/rs/test/online-symbolic.svg
中的数据对应于(uuay)
GVariant类型签名。
use gvdb::read::File;
use std::path::PathBuf;
pub fn main() {
let path = PathBuf::from("test-data/test3.gresource");
let file = File::from_file(&path).unwrap();
let table = file.hash_table().unwrap();
#[derive(serde::Deserialize, zvariant::Type)]
struct GResourceData {
size: u32,
flags: u32,
content: Vec<u8>,
}
let svg: GResourceData = table.get("/gvdb/rs/test/online-symbolic.svg").unwrap();
assert_eq!(svg.size, 1390);
assert_eq!(svg.flags, 0);
assert_eq!(svg.size as usize, svg.content.len() - 1);
// Ensure the last byte is zero because of zero-padding defined in the format
assert_eq!(svg.content[svg.content.len() - 1], 0);
let svg_str = std::str::from_utf8(&svg.content[0..svg.content.len() - 1]).unwrap();
println!("{}", svg_str);
}
许可
gvdb
和gvdb-macros
在MIT OR Apache-2.0许可下可用。请参阅LICENSES文件夹中的完整许可文本。
test-data/gresource/icons/
中包含的SVG图标文件在CC0-1.0许可下可用,并从Icon Development Kit重新分发。请参阅CC0-1.0.txt和文件以获取完整的许可文本。
依赖项
~3–11MB
~128K SLoC