前言
最近準備用Rust寫一個完善的blockchain的教學demo,在持久化時考慮到使用leveldb。通過查閱文檔,發現Rust中已經提供了使用leveldb的接口。將官方的例子修改了下,能夠運行通過。
示例
- 源碼
<code>use
std::{env, fs};use
leveldb::database::Database;use
leveldb::iterator::Iterable;use
leveldb::kv::KV;use
leveldb::options::{Options,WriteOptions,ReadOptions};fn
main
() {let
mut
dir = env::current_dir().unwrap(); dir.push("demo"
);let
path_buf = dir.clone(); fs::create_dir_all(dir).unwrap();let
path = path_buf.as_path();let
mut
options = Options::new(); options.create_if_missing =true
;let
database =match
Database::open(path, options) {Ok
(db) => { db },Err
(e) => {panic!
("failed to open database: {:?}"
, e) } };let
write_opts = WriteOptions::new();match
database.put(write_opts,1
, &[1
]) {Ok
(_) => { () },Err
(e) => {panic!
("failed to write to database: {:?}"
, e) } };let
read_opts = ReadOptions::new();let
res = database.get(read_opts,1
);match
res {Ok
(data) => {assert!
(data.is_some());assert_eq!
(data,Some
(vec!
[1
])); }Err
(e) => {panic!
("failed reading data: {:?}"
, e) } }let
read_opts = ReadOptions::new();let
mut
iter = database.iter(read_opts);let
entry = iter.next();assert_eq!
( entry,Some
((1
,vec!
[1
])) ); }/<code>
- 配置文件
<code> [ ] leveldb ="0.8.5"
/<code>