meilisearch / grenad

Tools to sort, merge, write, and read immutable key-value pairs :tomato:
https://docs.rs/grenad
MIT License
25 stars 3 forks source link

Introduce the Merge trait #13

Open Kerollmops opened 3 years ago

Kerollmops commented 3 years ago

This PR introduces a new Merge trait that simplifies the usage of the library in some way. It is now possible to return any type that implements AsRef<[u8]> reducing the amount of allocation required to return a merged value (i.e. returning an u32::to_be_bytes()).

Unfortunately, I wasn't able to implement this trait on the Fn(&[u8], values) trait, making it impossible to use a simple function as the merge function.

Another downside of this trait is the impossibility to return a value that comes from the provided values to merge, that can be a performance issue for merge functions like keep_first/last.