Rust 編程中使用 leveldb 的簡單例子

前言

最近準備用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>


分享到:


相關文章: