MCPcopy Index your code
hub / github.com/BurntSushi/fst

github.com/BurntSushi/fst @0.4.7

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.4.7 ↗ · + Follow
638 symbols 1,691 edges 48 files 136 documented · 21% 3 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

fst

This crate provides a fast implementation of ordered sets and maps using finite state machines. In particular, it makes use of finite state transducers to map keys to values as the machine is executed. Using finite state machines as data structures enables us to store keys in a compact format that is also easily searchable. For example, this crate leverages memory maps to make range queries very fast.

Check out my blog post Index 1,600,000,000 Keys with Automata and Rust for extensive background, examples and experiments.

Build status

Dual-licensed under MIT or the UNLICENSE.

Documentation

https://docs.rs/fst

The regex-automata crate provides implementations of the fst::Automata trait when its transducer feature is enabled. This permits using DFAs compiled by regex-automata to search finite state transducers produced by this crate.

Installation

Simply add a corresponding entry to your Cargo.toml dependency list:

```toml,ignore [dependencies] fst = "0.4"



### Example

This example demonstrates building a set in memory and executing a fuzzy query
against it. You'll need `fst = "0.4"` with the `levenshtein` feature enabled in
your `Cargo.toml`.

```rust
use fst::{IntoStreamer, Set};
use fst::automaton::Levenshtein;

fn main() -> Result<(), Box<dyn std::error::Error>> {
  // A convenient way to create sets in memory.
  let keys = vec!["fa", "fo", "fob", "focus", "foo", "food", "foul"];
  let set = Set::from_iter(keys)?;

  // Build our fuzzy query.
  let lev = Levenshtein::new("foo", 1)?;

  // Apply our fuzzy query to the set we built.
  let stream = set.search(lev).into_stream();

  let keys = stream.into_strs()?;
  assert_eq!(keys, vec!["fo", "fob", "foo", "food"]);
  Ok(())
}

Check out the documentation for a lot more examples!

Cargo features

  • levenshtein - Disabled by default. This adds the Levenshtein automaton to the automaton sub-module. This includes an additional dependency on utf8-ranges.

Extension points exported contracts — how you extend this code

Streamer (Interface)
Streamer describes a "streaming iterator." It provides a mechanism for writing code that is generic over streams produc [23 …
src/stream.rs
Automaton (Interface)
Automaton describes types that behave as a finite automaton. All implementors of this trait are represented by *byte ba [11 …
src/automaton/mod.rs
Batchable (Interface)
(no doc) [2 implementers]
fst-bin/src/merge.rs
IntoStreamer (Interface)
IntoStreamer describes types that can be converted to streams. This is analogous to the `IntoIterator` trait for `Itera [10 …
src/stream.rs

Core symbols most depended-on inside this repo

len
called by 48
fst-regex/src/sparse.rs
as_ref
called by 37
src/raw/mod.rs
push
called by 35
src/raw/ops.rs
len
called by 34
src/raw/mod.rs
clone
called by 28
src/raw/build.rs
push
called by 26
fst-regex/src/compile.rs
value
called by 25
src/raw/mod.rs
to_vec
called by 22
src/raw/mod.rs

Shape

Method 387
Function 126
Class 109
Enum 12
Interface 4

Languages

Rust100%

Modules by API surface

src/raw/mod.rs65 symbols
src/raw/node.rs62 symbols
src/map.rs61 symbols
src/set.rs58 symbols
src/raw/ops.rs44 symbols
src/raw/build.rs36 symbols
src/automaton/mod.rs27 symbols
src/automaton/levenshtein.rs21 symbols
src/raw/tests.rs19 symbols
src/raw/registry.rs19 symbols
fst-levenshtein/src/lib.rs18 symbols
fst-bin/src/merge.rs16 symbols

For agents

$ claude mcp add fst \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact