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

前言

最近準備用Rust寫一個完善的blockchain的教學demo,在持久化時考慮到使用leveldb。通過查閱文檔,發現Rust中已經提供了使用leveldb的接口。將官方的例子修改了下,能夠運行通過。

示例

  • 源碼
//src/main.rs
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]))
  );
}
  • 配置文件
//配置文件Cargo.toml中添加如下
[dependencies]
leveldb = "0.8.5"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章