avancements

This commit is contained in:
Raphaël 2023-12-24 14:35:34 +01:00
parent 6119b798a9
commit 96d645ca75
3 changed files with 135144 additions and 8 deletions

View file

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
anyhow = "1.0.76" anyhow = "1.0.76"
bytes = "1.5.0" bytes = "1.5.0"
paste = "1.0.14"
quick-xml = { version = "0.31.0", features = ["serde", "serialize"] } quick-xml = { version = "0.31.0", features = ["serde", "serialize"] }
reqwest = "0.11.23" reqwest = "0.11.23"
serde = { version = "1.0.193", features = ["derive"] } serde = { version = "1.0.193", features = ["derive"] }

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,6 @@
// https://api.opendata.onisep.fr/downloads/5fe0808a2da6f/5fe0808a2da6f.zip // https://api.opendata.onisep.fr/downloads/5fe0808a2da6f/5fe0808a2da6f.zip
use paste::paste;
use serde::{Deserialize, Deserializer}; use serde::{Deserialize, Deserializer};
use std::{ use std::{
io::{BufReader, Cursor}, io::{BufReader, Cursor},
@ -7,8 +8,9 @@ use std::{
}; };
macro_rules! unwrap_vec { macro_rules! unwrap_vec {
($fname:ident, $name:ident, $t:ty) => { ($name:ident, $t:ty) => {
fn $fname<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<$t>, D::Error> { paste! {
fn [<unwrap_ $name s>]<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Vec<$t>, D::Error> {
#[derive(Deserialize)] #[derive(Deserialize)]
struct List { struct List {
#[serde(default)] #[serde(default)]
@ -16,6 +18,7 @@ macro_rules! unwrap_vec {
} }
Ok(List::deserialize(deserializer)?.$name) Ok(List::deserialize(deserializer)?.$name)
} }
}
}; };
} }
@ -25,7 +28,7 @@ pub struct Metiers {
metiers: Vec<Metier>, metiers: Vec<Metier>,
} }
unwrap_vec!(unwrap_synonymes, synonyme, String); unwrap_vec!(synonyme, String);
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
pub struct Metier { pub struct Metier {
@ -33,6 +36,7 @@ pub struct Metier {
libelle_masculin: String, libelle_masculin: String,
#[serde(deserialize_with = "unwrap_synonymes")] #[serde(deserialize_with = "unwrap_synonymes")]
synonymes: Vec<String>, synonymes: Vec<String>,
acces_metier: String,
} }
pub async fn download_metier() -> anyhow::Result<Metiers> { pub async fn download_metier() -> anyhow::Result<Metiers> {