Crate stal [−] [src]
stal-rs
Set algebra solver for Redis in Rust, based on Stal.
Description
stal-rs provide set operations and resolves them in Redis.
Usage
stal-rs has no dependencies. It produces a vector of Redis operations that
have to be run by the user.
extern crate stal; let foobar = stal::Set::Inter(vec![stal::Set::Key(b"foo".to_vec()), stal::Set::Key(b"bar".to_vec())]); let foobar_nobaz = stal::Set::Diff(vec![foobar, stal::Set::Key(b"baz".to_vec())]); let foobar_nobaz_andqux = stal::Set::Union(vec![stal::Set::Key(b"qux".to_vec()), foobar_nobaz]); assert_eq!( stal::Stal::new("SMEMBERS".to_string(), foobar_nobaz_andqux).solve(), ( vec![ vec![b"MULTI".to_vec()], vec![b"SINTERSTORE".to_vec(), b"stal:2".to_vec(), b"foo".to_vec(), b"bar".to_vec()], vec![b"SDIFFSTORE".to_vec(), b"stal:1".to_vec(), b"stal:2".to_vec(), b"baz".to_vec()], vec![b"SUNIONSTORE".to_vec(), b"stal:0".to_vec(), b"qux".to_vec(), b"stal:1".to_vec()], vec![b"SMEMBERS".to_vec(), b"stal:0".to_vec()], vec![b"DEL".to_vec(), b"stal:0".to_vec(), b"stal:1".to_vec(), b"stal:2".to_vec()], vec![b"EXEC".to_vec()], ], 4 ));
stal-rs translates the internal calls to SUNION, SDIFF and
SINTER into SDIFFSTORE, SINTERSTORE and SUNIONSTORE to
perform the underlying operations, and it takes care of generating
and deleting any temporary keys.
The outmost command can be any set operation, for example:
extern crate stal; let myset = stal::Set::Key(b"my set".to_vec()); stal::Stal::new("SCARD".to_string(), myset).solve();
If you want to preview the commands Stal will send to generate
the results, you can use Stal.explain:
extern crate stal; assert_eq!( stal::Stal::new("SMEMBERS".to_string(), stal::Set::Inter(vec![ stal::Set::Union(vec![ stal::Set::Key(b"foo".to_vec()), stal::Set::Key(b"bar".to_vec()), ]), stal::Set::Key(b"baz".to_vec()), ]) ).explain(), vec![ vec![b"SUNIONSTORE".to_vec(), b"stal:1".to_vec(), b"foo".to_vec(), b"bar".to_vec()], vec![b"SINTERSTORE".to_vec(), b"stal:0".to_vec(), b"stal:1".to_vec(), b"baz".to_vec()], vec![b"SMEMBERS".to_vec(), b"stal:0".to_vec()], ] )
All commands are wrapped in a MULTI/EXEC transaction.
Structs
| Stal |
An operation to be executed on a set |
Enums
| Set |
A set of values. It can be generated from a Redis key or from a set operation based on other sets. |