Crates.io | gegevensmagazijn |
lib.rs | gegevensmagazijn |
version | 0.1.0 |
created_at | 2025-03-12 19:57:27.106417+00 |
updated_at | 2025-03-12 19:57:27.106417+00 |
description | een rudimentaire, simplistische en generieke implementatie van een API-client voor het Gegevensmagazijn van de Tweede Kamer der Staten-Generaal |
homepage | https://github.com/Mentalist/gegevensmagazijn-rs |
repository | https://github.com/Mentalist/gegevensmagazijn-rs |
max_upload_size | |
id | 1590181 |
size | 154,791 |
gegevensmagazijn
Een rudimentaire, simplistische en generieke Rust-implementatie van een API-client voor het Gegevensmagazijn (OData API) van de Tweede Kamer der Staten-Generaal.
Om deze Client te gebruiken dien je hem toe te voegen aan je project. Dit kan door de broncode te klonen of direct te verwijzen naar de GitHub-repo.
$ git clone https://github.com/Mentalist/gegevensmagazijn-rs.git
Voeg gegevensmagazijn
met het pad naar de broncode en tokio
als volgt toe aan je Cargo.toml
:
[dependencies]
gegevensmagazijn = { version = "0.1.0", path = "/pad/naar/broncode" }
# gegevensmagazijn = { git = "https://github.com/Mentalist/gegevensmagazijn-rs.git" }
tokio = { version = "1", features = ["full"] }
Success!
Het initialiseren van een Client is niet moeilijk, de enige keuze is tussen new()
en new_with_base_url(base_url: &str)
:
use gegevensmagazijn::{Client, ClientBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new()?;
/* of: */
let client = Client::new_with_base_url("http://cache-of-mock-server.local/")?;
/* of: */
let client = ClientBuilder::new()
.base_url("http://cache-of-mock-server.local/")
.build()?;
/* of: */
let client = Client::builder()
.base_url("http://cache-of-mock-server.local/")
.user_agent("niet firefox")
.build()?;
Ok(())
}
Er zijn verschillende (lees: te veel, maar ach, waarom niet?) manieren beschikbaar om gegevens op te halen uit het Gegevensmagazijn via de Client.
get_singular<T: Object>(id: &str, query: &str)
let result = client.get_singular::<Activiteit>(
"b7cf7dfc-1f46-4351-b2a5-000236b07ffa",
"$select=Id,Onderwerp",
).await;
get_singular_with_response<T: Object>(id: &str, query: &str)
let result = client.get_singular_with_response::<Activiteit>(
"b7cf7dfc-1f46-4351-b2a5-000236b07ffa",
"$select=Id,Onderwerp",
).await;
get_vector<T: Object>(query: &str)
let result = client.get_vector::<Besluit>(
"$filter=Verwijderd eq false and (BesluitSoort eq 'Stemmen - aangenomen' or BesluitSoort eq 'Stemmen - verworpen') and GewijzigdOp ge 2022-10-02T11:34:00.0-02:00&$orderby=GewijzigdOp asc &$expand=Zaak($filter=Verwijderd eq false;$expand=ZaakActor($filter=Relatie eq 'Indiener' or Relatie eq 'Medeindiener' and Verwijderd eq false),Document($filter=Verwijderd eq false)),Stemming($filter=Verwijderd eq false),Agendapunt($filter=Verwijderd eq false;$expand=Activiteit($filter=Soort eq 'Stemmingen'))",
).await;
get_vector_recursive<T: Object>(query: &str, max: Option<u32>)
let result = client.get_vector_recursive::<Besluit>(
"$filter=Verwijderd eq false and (BesluitSoort eq 'Stemmen - aangenomen' or BesluitSoort eq 'Stemmen - verworpen') and GewijzigdOp ge 2022-10-02T11:34:00.0-02:00&$orderby=GewijzigdOp asc &$expand=Zaak($filter=Verwijderd eq false;$expand=ZaakActor($filter=Relatie eq 'Indiener' or Relatie eq 'Medeindiener' and Verwijderd eq false),Document($filter=Verwijderd eq false)),Stemming($filter=Verwijderd eq false),Agendapunt($filter=Verwijderd eq false;$expand=Activiteit($filter=Soort eq 'Stemmingen'))",
Some(1),
).await;
get_vector_with_response<T: Object>(query: &str)
let result = client.get_vector_with_response::<Besluit>(
"$filter=Verwijderd eq false and (BesluitSoort eq 'Stemmen - aangenomen' or BesluitSoort eq 'Stemmen - verworpen') and GewijzigdOp ge 2022-10-02T11:34:00.0-02:00&$orderby=GewijzigdOp asc &$expand=Zaak($filter=Verwijderd eq false;$expand=ZaakActor($filter=Relatie eq 'Indiener' or Relatie eq 'Medeindiener' and Verwijderd eq false),Document($filter=Verwijderd eq false)),Stemming($filter=Verwijderd eq false),Agendapunt($filter=Verwijderd eq false;$expand=Activiteit($filter=Soort eq 'Stemmingen'))",
).await;
get_resource<T: Resource>(id: &str, dir: &str)
let result = client.get_resource::<Document>(
"2470914b-8978-4dc1-bc7e-c999e2671d21",
"tests/tmp/",
).await;
Om een werkende Client enigszins, maar toch niet te garanderen, zijn een aantal tests opgenomen om te valideren of deze voldoet aan de acceptatiecriteria.
Gebruik cargo test
om alle tests uit te voeren.
Bijdragen zijn welkom indien ze van hoge kwaliteit en gedetailleerd zijn en helpen de code en gebruikerservaring van deze crate te verbeteren. Het vooraf aanmaken van een issue wordt op prijs gesteld; zorg ervoor dat commits zijn gesigneerd.
gegevensmagazijn
is gratis en open source software, vrijgegeven onder de voorwaarden van de MIT-licentie.