memtable provides a collection of table-oriented features for use inmemory.
This crate acts as the aggregator of all subcrates such as memtable-core
and memtable-macros
and should be the only crate imported when using
features from either.
```toml [dependencies] memtable = "0.1"
macros
```
Most often, you will want to import the prelude
to bring in relevant
traits and structs:
```rust use memtable::prelude::*;
// Create a 2x3 (row x column) table of integers let mut table = FixedTable::from([ [1, 2, 3], [4, 5, 6], ]);
// Examine one of the values, replace it, and examine again asserteq!(table[(1, 2)], 6); table.insertcell(1, 2, 999); assert_eq!(table[(1, 2)], 999); ```
In the core library, you will find four primary tables:
MemTable
: table with a dynamic capacity for rows & columnsFixedTable
: table with a fixed capacity for rows & columnsFixedRowTable
: table with a fixed capacity for rows & dynamic capacity for columnsFixedColumnTable
: table with a dynamic capacity for rows & fixed capacity for columnsTable
: primary trait that exposes majority of common operations
to perform on tablesCellIter
: common trait that table iterators focused on
individual cells that enables zipping with a cell's
position and getting the current row & column of
the iteratorAlongside the essentials, the library also provides several features that provide extensions to the table arsenal:
FromCsv
(convert CSV into an inmemory table) and ToCsv
(convert an inmemory table to CSV)Cell2
and more up to Cell26
, which represent generic
enums that can be used as the data type for a table to enable multiple
data types within a table (e.g. MemTable<Cell2<String, bool>>
)Table
macro to derive new struct that implements the
Table
trait to be able to store some struct into a dedicated, inmemory tableCurrently, there is a singular macro, Table
, which is used to
derive a table to contain zero or more of a specific struct.
```rust use memtable::Table;
struct User { name: String, age: u8, }
// Derives a new struct, User{Table}, that can contain instances of User // that are broken up into their individual fields let mut table = UserTable::new();
// Inserting is straightforward as a User is considered a singular row table.pushrow(User { name: "Fred Flintstone".tostring(), age: 51, });
// You can also pass in a tuple of the fields in order of declaration table.pushrow(("Wilma Flintstone".tostring(), 47));
// Retrieval by row will provide the fields by ref as a tuple let (name, age) = table.row(0).unwrap(); asserteq!(name, "Fred Flintstone"); asserteq!(*age, 51);
// Tables of course provide a variety of other methods to inspect data
asserteq!(
table.namecolumn().collect::
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in vimvar by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.