Comments (1)
I've thrown together a couple of helper functions to make this a little more ergonomic in my application, sharing here in case it is helpful, and/or influences the query API here in this crate.
I'm sorting the results because that matters for determinism and matching in tests, but I can see how that may not always be 100% desirable.
let hostnames: Vec<String> =
query_facts_scalar(&mut a, "data($name) <- hostname($name)")?;
/// Query facts and return them in a stable order.
fn query_facts<T, R, E>(authorizer: &mut Authorizer, query: R) -> Result<Vec<T>, Token>
where
R: TryInto<Rule>,
T: TryFrom<Fact, Error = E> + Ord,
E: Into<Token>,
Token: From<<R as TryInto<Rule>>::Error>,
{
let mut data = authorizer.query(query)?;
data.sort();
Ok(data)
}
/// Query a set of scalar facts and return them in a stable order.
fn query_facts_scalar<T, R, E>(authorizer: &mut Authorizer, query: R) -> Result<Vec<T>, Token>
where
R: TryInto<Rule>,
E: Into<Token>,
Token: From<<R as TryInto<Rule>>::Error>,
(T,): TryFrom<Fact, Error = E> + Ord,
{
let mut data: Vec<(T,)> = query_facts(authorizer, query)?;
let data: Vec<T> = data.into_iter().map(|t| t.0).collect();
Ok(data)
}
from biscuit-rust.
Related Issues (20)
- Parsing chained method calls HOT 1
- Datalog boolean expression == does not evaluate properly HOT 3
- CLI long execution time HOT 3
- boolean logic should be lazy
- samples validation failure HOT 3
- Make biscuit-auth token::RootKeyProviter public HOT 3
- use separate version git tags for the different crates
- Detect free variables in expressions
- `RUSTSEC-2022-0093` security advisory
- Support heterogeneous sets
- `query_exactly_one()`
- Can't query facts added with authorizer_merge! HOT 2
- Non-deterministic output of `Authorizer.dump_code()` HOT 1
- Hidden state in `Authorizer` HOT 1
- Merging block builders with scope annotations
- Create new release HOT 1
- Proposal: Use padding free Base64 encoding/decoding HOT 4
- Proposal: add generic interface for external key registries HOT 2
- Cleanup free variables detection HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from biscuit-rust.