diff --git a/Cargo.toml b/Cargo.toml index dd994020d..df9c871ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,55 +1,5 @@ -[package] -edition = "2018" -name = "meilidb" -version = "0.3.2" -authors = ["Kerollmops "] - -[dependencies] -arc-swap = "0.3.7" -bincode = "1.1.2" -byteorder = "1.3.1" -fst = "0.3.3" -hashbrown = { version = "0.1.8", features = ["serde"] } -lazy_static = "1.2.0" -levenshtein_automata = { version = "0.1.1", features = ["fst_automaton"] } -linked-hash-map = { version = "0.5.1", features = ["serde_impl"] } -lockfree = "0.5.1" -log = "0.4.6" -rayon = "1.0.3" -sdset = "0.3.1" -serde = "1.0.88" -serde_derive = "1.0.88" -serde_json = { version = "1.0.38", features = ["preserve_order"] } -size_format = "1.0.2" -slice-group-by = "0.2.4" -unidecode = "0.3.0" - -[dependencies.toml] -git = "https://github.com/Kerollmops/toml-rs.git" -features = ["preserve_order"] -rev = "0372ba6" - -[dependencies.rocksdb] -git = "https://github.com/pingcap/rust-rocksdb.git" -rev = "306e201" - -[features] -default = ["simd"] -i128 = ["bincode/i128", "byteorder/i128"] -portable = ["rocksdb/portable"] -simd = ["rocksdb/sse"] -nightly = ["hashbrown/nightly", "slice-group-by/nightly"] - -[dev-dependencies] -csv = "1.0.5" -env_logger = "0.6.0" -jemallocator = "0.1.9" -quickcheck = "0.8.2" -rand = "0.6.5" -rand_xorshift = "0.1.1" -structopt = "0.2.14" -tempfile = "3.0.7" -termcolor = "1.0.4" - -[profile.release] -debug = true +[workspace] +members = [ + "meilidb", + "meilidb-core", +] diff --git a/meilidb-core/Cargo.toml b/meilidb-core/Cargo.toml new file mode 100644 index 000000000..5523a1331 --- /dev/null +++ b/meilidb-core/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "meilidb-core" +version = "0.1.0" +authors = ["Kerollmops "] +edition = "2018" + +[dependencies] +byteorder = "1.3.1" +fst = "0.3.3" +hashbrown = "0.1.8" +lazy_static = "1.2.0" +levenshtein_automata = { version = "0.1.1", features = ["fst_automaton"] } +log = "0.4.6" +rayon = "1.0.3" +sdset = "0.3.1" +serde = "1.0.88" +serde_derive = "1.0.88" +slice-group-by = "0.2.4" + +[features] +i128 = ["byteorder/i128"] diff --git a/src/automaton.rs b/meilidb-core/src/automaton.rs similarity index 100% rename from src/automaton.rs rename to meilidb-core/src/automaton.rs diff --git a/src/rank/criterion/document_id.rs b/meilidb-core/src/criterion/document_id.rs similarity index 76% rename from src/rank/criterion/document_id.rs rename to meilidb-core/src/criterion/document_id.rs index 8e4cf91b5..27025a2da 100644 --- a/src/rank/criterion/document_id.rs +++ b/meilidb-core/src/criterion/document_id.rs @@ -1,7 +1,6 @@ use std::cmp::Ordering; - -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; #[derive(Debug, Clone, Copy)] pub struct DocumentId; diff --git a/src/rank/criterion/exact.rs b/meilidb-core/src/criterion/exact.rs similarity index 92% rename from src/rank/criterion/exact.rs rename to meilidb-core/src/criterion/exact.rs index 6933aaff5..b76e9ace5 100644 --- a/src/rank/criterion/exact.rs +++ b/meilidb-core/src/criterion/exact.rs @@ -1,9 +1,7 @@ use std::cmp::Ordering; - use slice_group_by::GroupBy; - -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; #[inline] fn number_exact_matches(query_index: &[u32], is_exact: &[bool]) -> usize { diff --git a/src/rank/criterion/mod.rs b/meilidb-core/src/criterion/mod.rs similarity index 97% rename from src/rank/criterion/mod.rs rename to meilidb-core/src/criterion/mod.rs index 78c1bff5a..3e2fd5028 100644 --- a/src/rank/criterion/mod.rs +++ b/meilidb-core/src/criterion/mod.rs @@ -4,11 +4,11 @@ mod words_proximity; mod sum_of_words_attribute; mod sum_of_words_position; mod exact; -mod sort_by_attr; +// mod sort_by_attr; mod document_id; use std::cmp::Ordering; -use crate::rank::RawDocument; +use crate::RawDocument; pub use self::{ sum_of_typos::SumOfTypos, @@ -17,7 +17,7 @@ pub use self::{ sum_of_words_attribute::SumOfWordsAttribute, sum_of_words_position::SumOfWordsPosition, exact::Exact, - sort_by_attr::SortByAttr, + // sort_by_attr::SortByAttr, document_id::DocumentId, }; diff --git a/src/rank/criterion/number_of_words.rs b/meilidb-core/src/criterion/number_of_words.rs similarity index 89% rename from src/rank/criterion/number_of_words.rs rename to meilidb-core/src/criterion/number_of_words.rs index 0c6f5a200..798123e6a 100644 --- a/src/rank/criterion/number_of_words.rs +++ b/meilidb-core/src/criterion/number_of_words.rs @@ -1,9 +1,7 @@ use std::cmp::Ordering; - use slice_group_by::GroupBy; - -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; #[inline] fn number_of_query_words(query_index: &[u32]) -> usize { diff --git a/src/rank/criterion/sort_by_attr.rs b/meilidb-core/src/criterion/sort_by_attr.rs similarity index 98% rename from src/rank/criterion/sort_by_attr.rs rename to meilidb-core/src/criterion/sort_by_attr.rs index 05033a1e1..8b7b23fa6 100644 --- a/src/rank/criterion/sort_by_attr.rs +++ b/meilidb-core/src/criterion/sort_by_attr.rs @@ -3,9 +3,9 @@ use std::error::Error; use std::fmt; use crate::database::schema::{Schema, SchemaAttr}; -use crate::rank::criterion::Criterion; +use crate::criterion::Criterion; use crate::database::RankedMap; -use crate::rank::RawDocument; +use crate::RawDocument; /// An helper struct that permit to sort documents by /// some of their stored attributes. diff --git a/src/rank/criterion/sum_of_typos.rs b/meilidb-core/src/criterion/sum_of_typos.rs similarity index 97% rename from src/rank/criterion/sum_of_typos.rs rename to meilidb-core/src/criterion/sum_of_typos.rs index bbffec870..714766a20 100644 --- a/src/rank/criterion/sum_of_typos.rs +++ b/meilidb-core/src/criterion/sum_of_typos.rs @@ -2,8 +2,8 @@ use std::cmp::Ordering; use slice_group_by::GroupBy; -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; // This function is a wrong logarithmic 10 function. // It is safe to panic on input number higher than 3, diff --git a/src/rank/criterion/sum_of_words_attribute.rs b/meilidb-core/src/criterion/sum_of_words_attribute.rs similarity index 92% rename from src/rank/criterion/sum_of_words_attribute.rs rename to meilidb-core/src/criterion/sum_of_words_attribute.rs index 0a5303490..a46787797 100644 --- a/src/rank/criterion/sum_of_words_attribute.rs +++ b/meilidb-core/src/criterion/sum_of_words_attribute.rs @@ -1,9 +1,7 @@ use std::cmp::Ordering; - use slice_group_by::GroupBy; - -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; #[inline] fn sum_matches_attributes(query_index: &[u32], attribute: &[u16]) -> usize { diff --git a/src/rank/criterion/sum_of_words_position.rs b/meilidb-core/src/criterion/sum_of_words_position.rs similarity index 93% rename from src/rank/criterion/sum_of_words_position.rs rename to meilidb-core/src/criterion/sum_of_words_position.rs index 5938ce5ab..86f4e93fa 100644 --- a/src/rank/criterion/sum_of_words_position.rs +++ b/meilidb-core/src/criterion/sum_of_words_position.rs @@ -1,9 +1,7 @@ use std::cmp::Ordering; - use slice_group_by::GroupBy; - -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; #[inline] fn sum_matches_attribute_index(query_index: &[u32], word_index: &[u16]) -> usize { diff --git a/src/rank/criterion/words_proximity.rs b/meilidb-core/src/criterion/words_proximity.rs similarity index 98% rename from src/rank/criterion/words_proximity.rs rename to meilidb-core/src/criterion/words_proximity.rs index dbf26e21a..fc6c8bb31 100644 --- a/src/rank/criterion/words_proximity.rs +++ b/meilidb-core/src/criterion/words_proximity.rs @@ -1,9 +1,7 @@ use std::cmp::{self, Ordering}; - use slice_group_by::GroupBy; - -use crate::rank::criterion::Criterion; -use crate::rank::RawDocument; +use crate::criterion::Criterion; +use crate::RawDocument; const MAX_DISTANCE: u16 = 8; diff --git a/src/data/doc_ids.rs b/meilidb-core/src/data/doc_ids.rs similarity index 100% rename from src/data/doc_ids.rs rename to meilidb-core/src/data/doc_ids.rs diff --git a/src/data/doc_indexes.rs b/meilidb-core/src/data/doc_indexes.rs similarity index 100% rename from src/data/doc_indexes.rs rename to meilidb-core/src/data/doc_indexes.rs diff --git a/src/data/mod.rs b/meilidb-core/src/data/mod.rs similarity index 100% rename from src/data/mod.rs rename to meilidb-core/src/data/mod.rs diff --git a/src/data/shared_data.rs b/meilidb-core/src/data/shared_data.rs similarity index 100% rename from src/data/shared_data.rs rename to meilidb-core/src/data/shared_data.rs diff --git a/src/rank/distinct_map.rs b/meilidb-core/src/distinct_map.rs similarity index 100% rename from src/rank/distinct_map.rs rename to meilidb-core/src/distinct_map.rs diff --git a/src/database/index.rs b/meilidb-core/src/index.rs similarity index 100% rename from src/database/index.rs rename to meilidb-core/src/index.rs diff --git a/src/rank/mod.rs b/meilidb-core/src/lib.rs similarity index 62% rename from src/rank/mod.rs rename to meilidb-core/src/lib.rs index f5b07d27d..7266aa87d 100644 --- a/src/rank/mod.rs +++ b/meilidb-core/src/lib.rs @@ -1,16 +1,118 @@ pub mod criterion; +pub mod data; +mod index; +mod automaton; mod query_builder; mod distinct_map; +pub mod shared_data_cursor; +pub mod write_to_bytes; + use std::sync::Arc; +use serde_derive::{Serialize, Deserialize}; use slice_group_by::GroupBy; use rayon::slice::ParallelSliceMut; -use crate::{Match, DocumentId}; - +pub use self::index::{Index, IndexBuilder}; pub use self::query_builder::{FilterFunc, QueryBuilder, DistinctQueryBuilder}; +/// Represent an internally generated document unique identifier. +/// +/// It is used to inform the database the document you want to deserialize. +/// Helpful for custom ranking. +#[derive(Serialize, Deserialize)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Hash)] +pub struct DocumentId(pub u64); + +/// This structure represent the position of a word +/// in a document and its attributes. +/// +/// This is stored in the map, generated at index time, +/// extracted and interpreted at search time. +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(C)] +pub struct DocIndex { + /// The document identifier where the word was found. + pub document_id: DocumentId, + + /// The attribute in the document where the word was found + /// along with the index in it. + pub attribute: u16, + pub word_index: u16, + + /// The position in bytes where the word was found + /// along with the length of it. + /// + /// It informs on the original word area in the text indexed + /// without needing to run the tokenizer again. + pub char_index: u16, + pub char_length: u16, +} + +/// This structure represent a matching word with informations +/// on the location of the word in the document. +/// +/// The order of the field is important because it defines +/// the way these structures are ordered between themselves. +/// +/// The word in itself is not important. +// TODO do data oriented programming ? very arrays ? +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Match { + /// The word index in the query sentence. + /// Same as the `attribute_index` but for the query words. + /// + /// Used to retrieve the automaton that match this word. + pub query_index: u32, + + /// The distance the word has with the query word + /// (i.e. the Levenshtein distance). + pub distance: u8, + + /// The attribute in the document where the word was found + /// along with the index in it. + pub attribute: u16, + pub word_index: u16, + + /// Whether the word that match is an exact match or a prefix. + pub is_exact: bool, + + /// The position in bytes where the word was found + /// along with the length of it. + /// + /// It informs on the original word area in the text indexed + /// without needing to run the tokenizer again. + pub char_index: u16, + pub char_length: u16, +} + +impl Match { + pub fn zero() -> Self { + Match { + query_index: 0, + distance: 0, + attribute: 0, + word_index: 0, + is_exact: false, + char_index: 0, + char_length: 0, + } + } + + pub fn max() -> Self { + Match { + query_index: u32::max_value(), + distance: u8::max_value(), + attribute: u16::max_value(), + word_index: u16::max_value(), + is_exact: true, + char_index: u16::max_value(), + char_length: u16::max_value(), + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct Document { pub id: DocumentId, @@ -181,3 +283,15 @@ impl Matches { } } } + + +#[cfg(test)] +mod tests { + use super::*; + use std::mem; + + #[test] + fn docindex_mem_size() { + assert_eq!(mem::size_of::(), 24); + } +} diff --git a/src/rank/query_builder.rs b/meilidb-core/src/query_builder.rs similarity index 94% rename from src/rank/query_builder.rs rename to meilidb-core/src/query_builder.rs index 6b145b493..f462a52e6 100644 --- a/src/rank/query_builder.rs +++ b/meilidb-core/src/query_builder.rs @@ -11,11 +11,23 @@ use fst::Streamer; use log::info; use crate::automaton::{self, DfaExt, AutomatonExt}; -use crate::rank::distinct_map::{DistinctMap, BufferedDistinctMap}; -use crate::rank::criterion::Criteria; -use crate::database::Index; -use crate::rank::{raw_documents_from_matches, RawDocument, Document}; -use crate::{is_cjk, Match, DocumentId}; +use crate::distinct_map::{DistinctMap, BufferedDistinctMap}; +use crate::criterion::Criteria; +use crate::{raw_documents_from_matches, RawDocument, Document}; +use crate::{Index, Match, DocumentId}; + +// query splitting must move out of this crate +pub fn is_cjk(c: char) -> bool { + (c >= '\u{2e80}' && c <= '\u{2eff}') || + (c >= '\u{2f00}' && c <= '\u{2fdf}') || + (c >= '\u{3040}' && c <= '\u{309f}') || + (c >= '\u{30a0}' && c <= '\u{30ff}') || + (c >= '\u{3100}' && c <= '\u{312f}') || + (c >= '\u{3200}' && c <= '\u{32ff}') || + (c >= '\u{3400}' && c <= '\u{4dbf}') || + (c >= '\u{4e00}' && c <= '\u{9fff}') || + (c >= '\u{f900}' && c <= '\u{faff}') +} #[derive(Debug, PartialEq, Eq)] enum CharCategory { diff --git a/src/shared_data_cursor.rs b/meilidb-core/src/shared_data_cursor.rs similarity index 100% rename from src/shared_data_cursor.rs rename to meilidb-core/src/shared_data_cursor.rs diff --git a/src/write_to_bytes.rs b/meilidb-core/src/write_to_bytes.rs similarity index 100% rename from src/write_to_bytes.rs rename to meilidb-core/src/write_to_bytes.rs diff --git a/meilidb/Cargo.lock b/meilidb/Cargo.lock new file mode 100644 index 000000000..1a32c8b9e --- /dev/null +++ b/meilidb/Cargo.lock @@ -0,0 +1,1072 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arc-swap" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "arrayvec" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atty" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bincode" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "build_const" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bzip2-sys" +version = "0.1.7" +source = "git+https://github.com/alexcrichton/bzip2-rs.git#18fd3e18bc1763219a7496e466a16bd213448fec" +dependencies = [ + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cfg-if" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "clap" +version = "2.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cmake" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crc" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-deque" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "csv" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "csv-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "csv-core" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "env_logger" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fs_extra" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fst" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "generic-array" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glob" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "hashbrown" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "humantime" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "indexmap" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "itoa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "jemalloc-sys" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", + "fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "jemallocator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "jemalloc-sys 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "levenshtein_automata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.49" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "librocksdb_sys" +version = "0.1.0" +source = "git+https://github.com/pingcap/rust-rocksdb.git?rev=306e201#306e2010429873a1d1d979b70f0d30e437dddc6c" +dependencies = [ + "bzip2-sys 0.1.7 (git+https://github.com/alexcrichton/bzip2-rs.git)", + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "lz4-sys 1.8.0 (git+https://github.com/busyjay/lz4-rs.git?branch=adjust-build)", + "snappy-sys 0.1.0 (git+https://github.com/busyjay/rust-snappy.git?branch=static-link)", + "zstd-sys 1.4.9+zstd.1.3.8 (git+https://github.com/gyscos/zstd-rs.git)", +] + +[[package]] +name = "libz-sys" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_test 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lockfree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "owned-alloc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lz4-sys" +version = "1.8.0" +source = "git+https://github.com/busyjay/lz4-rs.git?branch=adjust-build#41509fea212e9ca55c1f6c53d4fd1ddf28cdf689" +dependencies = [ + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "meilidb" +version = "0.3.1" +dependencies = [ + "arc-swap 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "csv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "jemallocator 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lockfree 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quickcheck 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rocksdb 0.3.0 (git+https://github.com/pingcap/rust-rocksdb.git?rev=306e201)", + "sdset 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)", + "size_format 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slice-group-by 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile 3.0.7 (registry+https://github.com/rust-lang/crates.io-index)", + "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "toml 0.5.0 (git+https://github.com/Kerollmops/toml-rs.git?rev=0372ba6)", + "unidecode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memmap" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nodrop" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-complex" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "num_cpus" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "owned-alloc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "pkg-config" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "proc-macro2" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quick-error" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "quickcheck" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quote" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_jitter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_os" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon-core" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "redox_syscall" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "redox_termios" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rocksdb" +version = "0.3.0" +source = "git+https://github.com/pingcap/rust-rocksdb.git?rev=306e201#306e2010429873a1d1d979b70f0d30e437dddc6c" +dependencies = [ + "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "librocksdb_sys 0.1.0 (git+https://github.com/pingcap/rust-rocksdb.git?rev=306e201)", +] + +[[package]] +name = "ryu" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "sdset" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.88" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde_derive" +version = "1.0.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_json" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "serde_test" +version = "1.0.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "size_format" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "slice-group-by" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "snappy-sys" +version = "0.1.0" +source = "git+https://github.com/busyjay/rust-snappy.git?branch=static-link#be02178330bb17648d6ac605af249eba18b32b71" +dependencies = [ + "cmake 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "strsim" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "structopt" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "structopt-derive" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.15.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tempfile" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)", + "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termcolor" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termion" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "textwrap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "toml" +version = "0.5.0" +source = "git+https://github.com/Kerollmops/toml-rs.git?rev=0372ba6#0372ba6925aa2c6db4d27022562064e25cdc5312" +dependencies = [ + "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-segmentation" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unidecode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vcpkg" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_map" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "wincolor" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "zstd-sys" +version = "1.4.9+zstd.1.3.8" +source = "git+https://github.com/gyscos/zstd-rs.git#d51f87c668932670b9aced48d1b750506c211f11" +dependencies = [ + "cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)", + "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum arc-swap 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1025aeae2b664ca0ea726a89d574fe8f4e77dd712d443236ad1de00379450cf6" +"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" +"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" +"checksum autocfg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a6d640bee2da49f60a4068a7fae53acde8982514ab7bae8b8cea9e88cbcfd799" +"checksum bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3efe0b4c8eaeed8600549c29f538a6a11bf422858d0ed435b1d70ec4ab101190" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" +"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb" +"checksum bzip2-sys 0.1.7 (git+https://github.com/alexcrichton/bzip2-rs.git)" = "" +"checksum cc 1.0.29 (registry+https://github.com/rust-lang/crates.io-index)" = "4390a3b5f4f6bce9c1d0c00128379df433e53777fdd30e92f16a529332baec4e" +"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" +"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cmake 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "6ec65ee4f9c9d16f335091d23693457ed4928657ba4982289d7fafee03bc614a" +"checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" +"checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" +"checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" +"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" +"checksum csv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "9fd1c44c58078cfbeaf11fbb3eac9ae5534c23004ed770cc4bfb48e658ae4f04" +"checksum csv-core 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5cdef62f37e6ffe7d1f07a381bc0db32b7a3ff1cac0de56cb0d81e71f53d65" +"checksum either 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c67353c641dc847124ea1902d69bd753dee9bb3beff9aa3662ecf86c971d1fac" +"checksum env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afb070faf94c85d17d50ca44f6ad076bce18ae92f0037d350947240a36e9d42e" +"checksum fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" +"checksum fst 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "db72126ca7dff566cdbbdd54af44668c544897d9d3862b198141f176f1238bdf" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +"checksum generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c0f28c2f5bfb5960175af447a2da7c18900693738343dc896ffbcabd9839592" +"checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +"checksum hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" +"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +"checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" +"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" +"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" +"checksum jemalloc-sys 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "bfc62c8e50e381768ce8ee0428ee53741929f7ebd73e4d83f669bcf7693e00ae" +"checksum jemallocator 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9f0cd42ac65f758063fea55126b0148b1ce0a6354ff78e07a4d6806bc65c4ab3" +"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" +"checksum levenshtein_automata 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73a004f877f468548d8d0ac4977456a249d8fabbdb8416c36db163dfc8f2e8ca" +"checksum libc 0.2.49 (registry+https://github.com/rust-lang/crates.io-index)" = "413f3dfc802c5dc91dc570b05125b6cda9855edfaa9825c9849807876376e70e" +"checksum librocksdb_sys 0.1.0 (git+https://github.com/pingcap/rust-rocksdb.git?rev=306e201)" = "" +"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" +"checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" +"checksum lockfree 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "74ee94b5ad113c7cb98c5a040f783d0952ee4fe100993881d1673c2cb002dd23" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum lz4-sys 1.8.0 (git+https://github.com/busyjay/lz4-rs.git?branch=adjust-build)" = "" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db" +"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8" +"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" +"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124" +"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10" +"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" +"checksum num_cpus 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a23f0ed30a54abaa0c7e83b1d2d87ada7c3c23078d1d87815af3e3b6385fbba" +"checksum owned-alloc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "30fceb411f9a12ff9222c5f824026be368ff15dc2f13468d850c7d3f502205d6" +"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" +"checksum proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)" = "4d317f9caece796be1980837fd5cb3dfec5613ebdb04ad0956deea83ce168915" +"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +"checksum quickcheck 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3568ae5409428feef71bf062778bf5acfadc3d496b7696afa829f9eef70e17dc" +"checksum quote 0.6.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cdd8e04bd9c52e0342b406469d494fcb033be4bdbe5c606016defbb1681411e1" +"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" +"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +"checksum rand_jitter 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b9ea758282efe12823e0d952ddb269d2e1897227e464919a554f2a03ef1b832" +"checksum rand_os 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7c690732391ae0abafced5015ffb53656abfaec61b342290e5eb56b286a679d" +"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +"checksum rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "373814f27745b2686b350dd261bfd24576a6fb0e2c5919b3a2b6005f820b0473" +"checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)" = "423e376fffca3dfa06c9e9790a9ccd282fafb3cc6e6397d01dbf64f9bacc6b85" +"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +"checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f" +"checksum regex-syntax 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8c2f35eedad5295fdf00a63d7d4b238135723f92b434ec06774dad15c7ab0861" +"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" +"checksum rocksdb 0.3.0 (git+https://github.com/pingcap/rust-rocksdb.git?rev=306e201)" = "" +"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" +"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum sdset 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "876890e4982cfbf82aa77cf73df0c31812a912fb89fd454e02ef21ba5d3cac3b" +"checksum serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)" = "9f301d728f2b94c9a7691c90f07b0b4e8a4517181d9461be94c04bddeb4bd850" +"checksum serde_derive 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)" = "beed18e6f5175aef3ba670e57c60ef3b1b74d250d962a26604bff4c80e970dd4" +"checksum serde_json 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)" = "27dce848e7467aa0e2fcaf0a413641499c0b745452aaca1194d24dedde9e13c9" +"checksum serde_test 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)" = "edb44ae54ee0ddf787ad6a5f4769cd61967cafe8ed4ef1b5189c10af73f689e2" +"checksum size_format 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6ed5f6ab2122c6dec69dca18c72fa4590a27e581ad20d44960fe74c032a0b23b" +"checksum slice-group-by 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "049599674ed27c9b78b93265482068999c0fc71116e186ea4a408e9fc47723b0" +"checksum snappy-sys 0.1.0 (git+https://github.com/busyjay/rust-snappy.git?branch=static-link)" = "" +"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" +"checksum structopt 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "670ad348dc73012fcf78c71f06f9d942232cdd4c859d4b6975e27836c3efc0c3" +"checksum structopt-derive 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "ef98172b1a00b0bec738508d3726540edcbd186d50dfd326f2b1febbb3559f04" +"checksum syn 0.15.26 (registry+https://github.com/rust-lang/crates.io-index)" = "f92e629aa1d9c827b2bb8297046c1ccffc57c99b947a680d3ccff1f136a3bee9" +"checksum tempfile 3.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b86c784c88d98c801132806dadd3819ed29d8600836c4088e855cdf3e178ed8a" +"checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" +"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" +"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum toml 0.5.0 (git+https://github.com/Kerollmops/toml-rs.git?rev=0372ba6)" = "" +"checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa6024fc12ddfd1c6dbc14a80fa2324d4568849869b779f6bd37e5e4c03344d1" +"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unidecode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "402bb19d8e03f1d1a7450e2bd613980869438e0666331be3e073089124aa1adc" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" +"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" +"checksum zstd-sys 1.4.9+zstd.1.3.8 (git+https://github.com/gyscos/zstd-rs.git)" = "" diff --git a/meilidb/Cargo.toml b/meilidb/Cargo.toml new file mode 100644 index 000000000..f903a8ac0 --- /dev/null +++ b/meilidb/Cargo.toml @@ -0,0 +1,50 @@ +[package] +edition = "2018" +name = "meilidb" +version = "0.3.1" +authors = ["Kerollmops "] + +[dependencies] +arc-swap = "0.3.7" +bincode = "1.1.2" +byteorder = "1.3.1" +fst = "0.3.3" +hashbrown = { version = "0.1.8", features = ["serde"] } +linked-hash-map = { version = "0.5.1", features = ["serde_impl"] } +lockfree = "0.5.1" +log = "0.4.6" +sdset = "0.3.1" +serde = "1.0.88" +serde_derive = "1.0.88" +serde_json = { version = "1.0.38", features = ["preserve_order"] } +size_format = "1.0.2" +slice-group-by = "0.2.4" +unidecode = "0.3.0" +meilidb-core = { path = "../meilidb-core", version = "0.1.0" } + +[dependencies.toml] +git = "https://github.com/Kerollmops/toml-rs.git" +features = ["preserve_order"] +rev = "0372ba6" + +[dependencies.rocksdb] +git = "https://github.com/pingcap/rust-rocksdb.git" +rev = "306e201" + +[features] +default = ["simd"] +i128 = ["bincode/i128"] +portable = ["rocksdb/portable"] +simd = ["rocksdb/sse"] +nightly = ["hashbrown/nightly", "slice-group-by/nightly"] + +[dev-dependencies] +csv = "1.0.5" +env_logger = "0.6.0" +jemallocator = "0.1.9" +quickcheck = "0.8.2" +rand = "0.6.5" +rand_xorshift = "0.1.1" +structopt = "0.2.14" +tempfile = "3.0.7" +termcolor = "1.0.4" diff --git a/src/common_words.rs b/meilidb/src/common_words.rs similarity index 100% rename from src/common_words.rs rename to meilidb/src/common_words.rs diff --git a/src/database/config.rs b/meilidb/src/database/config.rs similarity index 100% rename from src/database/config.rs rename to meilidb/src/database/config.rs diff --git a/src/database/document_key.rs b/meilidb/src/database/document_key.rs similarity index 99% rename from src/database/document_key.rs rename to meilidb/src/database/document_key.rs index 52fd428f8..d6b9865ef 100644 --- a/src/database/document_key.rs +++ b/meilidb/src/database/document_key.rs @@ -5,7 +5,7 @@ use std::fmt; use byteorder::{BigEndian, WriteBytesExt, ReadBytesExt}; use crate::database::schema::SchemaAttr; -use crate::DocumentId; +use meilidb_core::DocumentId; const DOC_KEY_LEN: usize = 4 + size_of::(); const DOC_KEY_ATTR_LEN: usize = DOC_KEY_LEN + 1 + size_of::(); diff --git a/src/database/mod.rs b/meilidb/src/database/mod.rs similarity index 99% rename from src/database/mod.rs rename to meilidb/src/database/mod.rs index 70ca62d92..727a30bac 100644 --- a/src/database/mod.rs +++ b/meilidb/src/database/mod.rs @@ -17,9 +17,9 @@ use hashbrown::HashMap; use log::{info, error, warn}; use crate::database::schema::SchemaAttr; -use crate::shared_data_cursor::FromSharedDataCursor; -use crate::write_to_bytes::WriteToBytes; -use crate::DocumentId; +use meilidb_core::shared_data_cursor::FromSharedDataCursor; +use meilidb_core::write_to_bytes::WriteToBytes; +use meilidb_core::{Index, DocumentId}; use self::update::{ReadIndexEvent, ReadRankedMapEvent}; @@ -29,7 +29,6 @@ pub use self::view::{DatabaseView, DocumentIter}; pub use self::update::Update; pub use self::serde::SerializerError; pub use self::schema::Schema; -pub use self::index::Index; pub use self::number::{Number, ParseNumberError}; pub type RankedMap = HashMap<(DocumentId, SchemaAttr), Number>; @@ -41,7 +40,6 @@ const CONFIG: &[u8] = b"config"; pub mod config; pub mod schema; -pub(crate) mod index; mod number; mod document_key; mod serde; diff --git a/src/database/number.rs b/meilidb/src/database/number.rs similarity index 100% rename from src/database/number.rs rename to meilidb/src/database/number.rs diff --git a/src/database/schema.rs b/meilidb/src/database/schema.rs similarity index 99% rename from src/database/schema.rs rename to meilidb/src/database/schema.rs index fc64ffccc..b4e0a070c 100644 --- a/src/database/schema.rs +++ b/meilidb/src/database/schema.rs @@ -10,7 +10,7 @@ use linked_hash_map::LinkedHashMap; use crate::database::serde::find_id::FindDocumentIdSerializer; use crate::database::serde::SerializerError; -use crate::DocumentId; +use meilidb_core::DocumentId; pub const STORED: SchemaProps = SchemaProps { stored: true, indexed: false, ranked: false }; pub const INDEXED: SchemaProps = SchemaProps { stored: false, indexed: true, ranked: false }; diff --git a/src/database/serde/deserializer.rs b/meilidb/src/database/serde/deserializer.rs similarity index 99% rename from src/database/serde/deserializer.rs rename to meilidb/src/database/serde/deserializer.rs index 26d74984d..92374ab48 100644 --- a/src/database/serde/deserializer.rs +++ b/meilidb/src/database/serde/deserializer.rs @@ -10,7 +10,7 @@ use serde::de::{self, Visitor, IntoDeserializer}; use crate::database::document_key::{DocumentKey, DocumentKeyAttr}; use crate::database::schema::Schema; -use crate::DocumentId; +use meilidb_core::DocumentId; pub struct Deserializer<'a, D> where D: Deref diff --git a/src/database/serde/find_id.rs b/meilidb/src/database/serde/find_id.rs similarity index 99% rename from src/database/serde/find_id.rs rename to meilidb/src/database/serde/find_id.rs index 98e2e8036..3c44b5e35 100644 --- a/src/database/serde/find_id.rs +++ b/meilidb/src/database/serde/find_id.rs @@ -3,7 +3,7 @@ use serde::ser; use crate::database::serde::key_to_string::KeyToStringSerializer; use crate::database::serde::{SerializerError, calculate_hash}; -use crate::DocumentId; +use meilidb_core::DocumentId; pub struct FindDocumentIdSerializer<'a> { pub id_attribute_name: &'a str, diff --git a/src/database/serde/indexer_serializer.rs b/meilidb/src/database/serde/indexer_serializer.rs similarity index 99% rename from src/database/serde/indexer_serializer.rs rename to meilidb/src/database/serde/indexer_serializer.rs index c25ffe98c..2734fb3be 100644 --- a/src/database/serde/indexer_serializer.rs +++ b/meilidb/src/database/serde/indexer_serializer.rs @@ -2,13 +2,14 @@ use std::collections::HashSet; use serde::Serialize; use serde::ser; +use meilidb_core::{DocumentId, DocIndex}; use crate::database::update::DocumentUpdate; use crate::database::serde::SerializerError; use crate::database::schema::SchemaAttr; use crate::tokenizer::TokenizerBuilder; use crate::tokenizer::Token; -use crate::{is_cjk, DocumentId, DocIndex}; +use crate::is_cjk; pub struct IndexerSerializer<'a, 'b, B> { pub tokenizer_builder: &'a B, diff --git a/src/database/serde/key_to_string.rs b/meilidb/src/database/serde/key_to_string.rs similarity index 100% rename from src/database/serde/key_to_string.rs rename to meilidb/src/database/serde/key_to_string.rs diff --git a/src/database/serde/mod.rs b/meilidb/src/database/serde/mod.rs similarity index 100% rename from src/database/serde/mod.rs rename to meilidb/src/database/serde/mod.rs diff --git a/src/database/serde/serializer.rs b/meilidb/src/database/serde/serializer.rs similarity index 99% rename from src/database/serde/serializer.rs rename to meilidb/src/database/serde/serializer.rs index 2f41bb82c..7e38f938e 100644 --- a/src/database/serde/serializer.rs +++ b/meilidb/src/database/serde/serializer.rs @@ -10,7 +10,7 @@ use crate::database::update::DocumentUpdate; use crate::database::serde::SerializerError; use crate::tokenizer::TokenizerBuilder; use crate::database::schema::Schema; -use crate::DocumentId; +use meilidb_core::DocumentId; pub struct Serializer<'a, 'b, B> { pub schema: &'a Schema, diff --git a/src/database/serde/value_to_number.rs b/meilidb/src/database/serde/value_to_number.rs similarity index 100% rename from src/database/serde/value_to_number.rs rename to meilidb/src/database/serde/value_to_number.rs diff --git a/src/database/update/index_event.rs b/meilidb/src/database/update/index_event.rs similarity index 90% rename from src/database/update/index_event.rs rename to meilidb/src/database/update/index_event.rs index cd006aa3c..20dbcbf46 100644 --- a/src/database/update/index_event.rs +++ b/meilidb/src/database/update/index_event.rs @@ -1,11 +1,11 @@ use std::error::Error; use byteorder::{ReadBytesExt, WriteBytesExt}; +use meilidb_core::shared_data_cursor::{SharedDataCursor, FromSharedDataCursor}; +use meilidb_core::write_to_bytes::WriteToBytes; +use meilidb_core::data::DocIds; -use crate::shared_data_cursor::{SharedDataCursor, FromSharedDataCursor}; -use crate::write_to_bytes::WriteToBytes; use crate::database::Index; -use crate::data::DocIds; pub enum WriteIndexEvent<'a> { RemovedDocuments(&'a DocIds), diff --git a/src/database/update/mod.rs b/meilidb/src/database/update/mod.rs similarity index 98% rename from src/database/update/mod.rs rename to meilidb/src/database/update/mod.rs index 548fb8bc2..eaae462b2 100644 --- a/src/database/update/mod.rs +++ b/meilidb/src/database/update/mod.rs @@ -5,19 +5,18 @@ use rocksdb::rocksdb::{Writable, WriteBatch}; use hashbrown::hash_map::HashMap; use sdset::{Set, SetBuf}; use serde::Serialize; +use meilidb_core::write_to_bytes::WriteToBytes; +use meilidb_core::data::DocIds; +use meilidb_core::{IndexBuilder, DocumentId, DocIndex}; use crate::database::document_key::{DocumentKey, DocumentKeyAttr}; use crate::database::serde::serializer::Serializer; use crate::database::serde::SerializerError; use crate::database::schema::SchemaAttr; use crate::database::schema::Schema; -use crate::database::index::IndexBuilder; use crate::database::{DATA_INDEX, DATA_RANKED_MAP}; use crate::database::{RankedMap, Number}; use crate::tokenizer::TokenizerBuilder; -use crate::write_to_bytes::WriteToBytes; -use crate::data::DocIds; -use crate::{DocumentId, DocIndex}; pub use self::index_event::{ReadIndexEvent, WriteIndexEvent}; pub use self::ranked_map_event::{ReadRankedMapEvent, WriteRankedMapEvent}; diff --git a/src/database/update/ranked_map_event.rs b/meilidb/src/database/update/ranked_map_event.rs similarity index 90% rename from src/database/update/ranked_map_event.rs rename to meilidb/src/database/update/ranked_map_event.rs index 5a51f8799..428bc62cf 100644 --- a/src/database/update/ranked_map_event.rs +++ b/meilidb/src/database/update/ranked_map_event.rs @@ -1,11 +1,11 @@ use std::error::Error; use byteorder::{ReadBytesExt, WriteBytesExt}; +use meilidb_core::shared_data_cursor::{SharedDataCursor, FromSharedDataCursor}; +use meilidb_core::write_to_bytes::WriteToBytes; +use meilidb_core::data::DocIds; -use crate::shared_data_cursor::{SharedDataCursor, FromSharedDataCursor}; -use crate::write_to_bytes::WriteToBytes; use crate::database::RankedMap; -use crate::data::DocIds; pub enum WriteRankedMapEvent<'a> { RemovedDocuments(&'a DocIds), diff --git a/src/database/view.rs b/meilidb/src/database/view.rs similarity index 98% rename from src/database/view.rs rename to meilidb/src/database/view.rs index b1fbc0bdd..8eb21a4c8 100644 --- a/src/database/view.rs +++ b/meilidb/src/database/view.rs @@ -6,16 +6,15 @@ use std::{fmt, marker}; use rocksdb::rocksdb_options::{ReadOptions, EnvOptions, ColumnFamilyOptions}; use rocksdb::rocksdb::{DB, DBVector, Snapshot, SeekKey, SstFileWriter}; use serde::de::DeserializeOwned; +use meilidb_core::{Index, QueryBuilder, FilterFunc}; +use meilidb_core::DocumentId; use crate::database::{retrieve_data_schema, retrieve_data_index, retrieve_data_ranked_map, retrieve_config}; use crate::database::serde::deserializer::Deserializer; use crate::database::{DocumentKey, DocumentKeyAttr}; -use crate::rank::{QueryBuilder, FilterFunc}; use crate::database::schema::Schema; -use crate::database::index::Index; use crate::database::RankedMap; use crate::database::Config; -use crate::DocumentId; pub struct DatabaseView where D: Deref diff --git a/meilidb/src/lib.rs b/meilidb/src/lib.rs new file mode 100644 index 000000000..ff4df44ea --- /dev/null +++ b/meilidb/src/lib.rs @@ -0,0 +1,22 @@ +#![cfg_attr(feature = "nightly", feature(test))] + +pub mod database; +pub mod tokenizer; +mod common_words; + +pub use rocksdb; + +pub use self::tokenizer::Tokenizer; +pub use self::common_words::CommonWords; + +pub fn is_cjk(c: char) -> bool { + (c >= '\u{2e80}' && c <= '\u{2eff}') || + (c >= '\u{2f00}' && c <= '\u{2fdf}') || + (c >= '\u{3040}' && c <= '\u{309f}') || + (c >= '\u{30a0}' && c <= '\u{30ff}') || + (c >= '\u{3100}' && c <= '\u{312f}') || + (c >= '\u{3200}' && c <= '\u{32ff}') || + (c >= '\u{3400}' && c <= '\u{4dbf}') || + (c >= '\u{4e00}' && c <= '\u{9fff}') || + (c >= '\u{f900}' && c <= '\u{faff}') +} diff --git a/src/tokenizer/mod.rs b/meilidb/src/tokenizer/mod.rs similarity index 100% rename from src/tokenizer/mod.rs rename to meilidb/src/tokenizer/mod.rs diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 964de8f75..000000000 --- a/src/lib.rs +++ /dev/null @@ -1,136 +0,0 @@ -#![cfg_attr(feature = "nightly", feature(test))] - -pub mod automaton; -pub mod database; -pub mod data; -pub mod rank; -pub mod tokenizer; -mod common_words; -mod shared_data_cursor; -mod write_to_bytes; - -use serde_derive::{Serialize, Deserialize}; - -pub use rocksdb; - -pub use self::tokenizer::Tokenizer; -pub use self::common_words::CommonWords; - -pub fn is_cjk(c: char) -> bool { - (c >= '\u{2e80}' && c <= '\u{2eff}') || - (c >= '\u{2f00}' && c <= '\u{2fdf}') || - (c >= '\u{3040}' && c <= '\u{309f}') || - (c >= '\u{30a0}' && c <= '\u{30ff}') || - (c >= '\u{3100}' && c <= '\u{312f}') || - (c >= '\u{3200}' && c <= '\u{32ff}') || - (c >= '\u{3400}' && c <= '\u{4dbf}') || - (c >= '\u{4e00}' && c <= '\u{9fff}') || - (c >= '\u{f900}' && c <= '\u{faff}') -} - -/// Represent an internally generated document unique identifier. -/// -/// It is used to inform the database the document you want to deserialize. -/// Helpful for custom ranking. -#[derive(Serialize, Deserialize)] -#[derive(Debug, Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Hash)] -pub struct DocumentId(u64); - -/// This structure represent the position of a word -/// in a document and its attributes. -/// -/// This is stored in the map, generated at index time, -/// extracted and interpreted at search time. -#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] -#[repr(C)] -pub struct DocIndex { - /// The document identifier where the word was found. - pub document_id: DocumentId, - - /// The attribute in the document where the word was found - /// along with the index in it. - pub attribute: u16, - pub word_index: u16, - - /// The position in bytes where the word was found - /// along with the length of it. - /// - /// It informs on the original word area in the text indexed - /// without needing to run the tokenizer again. - pub char_index: u16, - pub char_length: u16, -} - -/// This structure represent a matching word with informations -/// on the location of the word in the document. -/// -/// The order of the field is important because it defines -/// the way these structures are ordered between themselves. -/// -/// The word in itself is not important. -// TODO do data oriented programming ? very arrays ? -#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct Match { - /// The word index in the query sentence. - /// Same as the `attribute_index` but for the query words. - /// - /// Used to retrieve the automaton that match this word. - pub query_index: u32, - - /// The distance the word has with the query word - /// (i.e. the Levenshtein distance). - pub distance: u8, - - /// The attribute in the document where the word was found - /// along with the index in it. - pub attribute: u16, - pub word_index: u16, - - /// Whether the word that match is an exact match or a prefix. - pub is_exact: bool, - - /// The position in bytes where the word was found - /// along with the length of it. - /// - /// It informs on the original word area in the text indexed - /// without needing to run the tokenizer again. - pub char_index: u16, - pub char_length: u16, -} - -impl Match { - pub fn zero() -> Self { - Match { - query_index: 0, - distance: 0, - attribute: 0, - word_index: 0, - is_exact: false, - char_index: 0, - char_length: 0, - } - } - - pub fn max() -> Self { - Match { - query_index: u32::max_value(), - distance: u8::max_value(), - attribute: u16::max_value(), - word_index: u16::max_value(), - is_exact: true, - char_index: u16::max_value(), - char_length: u16::max_value(), - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use std::mem; - - #[test] - fn docindex_mem_size() { - assert_eq!(mem::size_of::(), 16); - } -}